我有一个mod_perl程序,它实现了自己的处理函数(即它不使用Apache :: Registry)。
我有一个使用Parse :: RecDescent编写的解析器模块。
我已成功在另一个类似的mod_perl程序中使用解析器模块几个月没有问题。
在我的新mod_perl程序中简单地“使用”解析器模块(即没有对模块中的函数的引用)会导致Apache服务器生成子进程,直到达到它的最大限制。注释掉“use”语句解决了这个问题(但显然我没有使用解析器)。
我怀疑包含库正在做一些导致Apache生命周期在它结束之前挂起的东西。我相信这是在日志记录阶段之后发生的,因为发送了响应并更新了日志。
有人对我有任何线索吗?我很茫然。
- 菲尔 -
答案 0 :(得分:1)
我没有给你一个答案(个人而言,我使用fastcgi ...)但是我可以建议一种方法:将strace,ltrace,gdb等附加到apache子进程并查看其挂起的位置。您可能需要使用调试符号重建apache,mod_perl甚至perl,以便从gdb获得合理的输出。
答案 1 :(得分:1)
所以,我解决了这个问题,但不明白为什么会有效。这让我有点沮丧,但我很感激问题已经消失。
在我接受derobert的建议并追踪过程之前,我决定将库加载到mod_perl启动文件,然后问题解决了。
有趣的是,我花了一天的工作才能达到我理解问题的程度,足以在SO上提出问题,然后一旦我达到这一点,一个简单的事情就解决了它。