为什么在mod_perl中加载我的Perl模块导致Apache挂起?

时间:2009-03-18 17:34:29

标签: perl apache mod-perl

我有一个mod_perl程序,它实现了自己的处理函数(即它不使用Apache :: Registry)。

我有一个使用Parse :: RecDescent编写的解析器模块。

我已成功在另一个类似的mod_perl程序中使用解析器模块几个月没有问题。

在我的新mod_perl程序中简单地“使用”解析器模块(即没有对模块中的函数的引用)会导致Apache服务器生成子进程,直到达到它的最大限制。注释掉“use”语句解决了这个问题(但显然我没有使用解析器)。

我怀疑包含库正在做一些导致Apache生命周期在它结束之前挂起的东西。我相信这是在日志记录阶段之后发生的,因为发送了响应并更新了日志。

有人对我有任何线索吗?我很茫然。

- 菲尔 -

2 个答案:

答案 0 :(得分:1)

我没有给你一个答案(个人而言,我使用fastcgi ...)但是我可以建议一种方法:将strace,ltrace,gdb等附加到apache子进程并查看其挂起的位置。您可能需要使用调试符号重建apache,mod_perl甚至perl,以便从gdb获得合理的输出。

答案 1 :(得分:1)

所以,我解决了这个问题,但不明白为什么会有效。这让我有点沮丧,但我很感激问题已经消失。

在我接受derobert的建议并追踪过程之前,我决定将库加载到mod_perl启动文件,然后问题解决了。

有趣的是,我花了一天的工作才能达到我理解问题的程度,足以在SO上提出问题,然后一旦我达到这一点,一个简单的事情就解决了它。