Perl与过程管理

Perl与过程管理,perl,memory,process,parallel-processing,ipc,Perl,Memory,Process,Parallel Processing,Ipc,我正在使用Perl开发一个相当大的企业应用程序,它有几十个模块等,主要用于在web上爬行一些东西 我写的一个子程序,是做一个图像检索和分析。对于我发送给它的每个参数,通常需要几秒钟才能完成。所以我将它发送到另一个进程(分叉…)。问题是,一段时间后,系统变得非常不稳定,内存已满 问题: 是否因为创建的每个进程都会在单独的内存位置创建父数据的副本?如果是,是否意味着每个孩子都有一份所有模块的副本?(还有十个……) 释放内存/管理这些进程的最佳方法是什么 分叉使用,所以分叉进程不应该占用太多内存,除非

我正在使用Perl开发一个相当大的企业应用程序,它有几十个模块等,主要用于在web上爬行一些东西

我写的一个子程序,是做一个图像检索和分析。对于我发送给它的每个参数,通常需要几秒钟才能完成。所以我将它发送到另一个进程(分叉…)。问题是,一段时间后,系统变得非常不稳定,内存已满

问题

  • 是否因为创建的每个进程都会在单独的内存位置创建父数据的副本?如果是,是否意味着每个孩子都有一份所有模块的副本?(还有十个……)
  • 释放内存/管理这些进程的最佳方法是什么
  • 分叉使用,所以分叉进程不应该占用太多内存,除非它们特别长寿命


    听起来你的系统有内存泄漏。您是否有任何相互递归的依赖关系或循环数据结构?如果是这样的话,您可能希望研究如何使用来调整数据结构上的引用计数

    我将研究它,并且,我在没有任何sig处理程序的情况下使用“exit 0”退出每个子进程,稍后当我检查ps时,我会看到很多perl僵尸进程,很多,甚至十分之一,这是否正常?您需要在您的子进程上接收它们的退出状态,否则它们将作为僵尸继续存在。您可能需要研究一些类似于为您处理这些细节的东西。