【发布时间】:2009-01-21 19:18:36
【问题描述】:
我正在使用 mod perl 1.3.0 和 apache 1.3.41 perl 版本 5.8.6,内存大小似乎每 3 次或 4 次请求增加约 4k。我们正在运行的 Perl 脚本很简单:
print "Content-type: text/html\n\n"; print "baby";
然而,当我们用 apache benchmark 猛击 apache 进程时,它只会增长和增长。我们的目标是:
ab -n 100000 -c 1 http://localhost/search/search.cgi &> /dev/null
在大约 20000 个请求之后,我们观察到进程大小从大约 4 MB 增长到 24。
回答以下问题: 我们在 redhat 企业 4.7 上执行此操作。 它之所以被挑出来是因为我们遇到了一个静态文件,或者是一个直接的 cgi 请求并且内存没有增长。当我们使用 PerlHandler Apache::Registry 或 PerlRun,或者只是将 PerlHandler 指向一些作为处理程序的代码时,它们都会泄漏。
有人见过这样的事情,或者知道发生了什么吗?
编辑:
谢谢大家的回答。我使用了 Devel::Cycle 并发现了一个泄漏,但这里的问题是我们已经剥离了我们的代码以打印标题和语句。 Perl 中的打印功能不会泄漏(我希望....)。我读过 Practical Modperl 中的内存泄漏部分,但它处理编码问题,而且除非 Perl 的打印功能有问题,否则它不是代码。
【问题讨论】:
-
您可以考虑将其表述为一个具体的问题。 :)
-
您能否发布您正在使用的操作系统的详细信息?您是否也尝试过让该过程继续进行,直到达到内存限制并且您必须重新启动服务器?基本上我想知道的是你是怎么挑出它只是这个模块的内存泄漏?
-
您也可以考虑向 apache 人员发布错误报告。
标签: perl apache memory memory-leaks mod-perl