3

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

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

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

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

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

有人对我有任何线索吗?我不知所措。

--菲尔--

4

2 回答 2

1

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

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

有趣的是,我花了一天的时间才达到我对问题的理解足以提出关于 SO 的问题,然后一旦我达到了这一点,一个简单的事情就解决了它。

于 2009-03-18T18:11:25.590 回答
1

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

于 2009-03-18T17:47:57.783 回答