我在我的快速error.log中有这个:
[Fri Sep 18 08:10:54 2009] [notice] child pid 9178 exit signal Segmentation fault (11)
[Fri Sep 18 08:11:41 2009] [notice] child pid 9187 exit signal Segmentation fault (11)
[Fri Sep 18 08:12:12 2009] [notice] child pid 9204 exit signal Segmentation fault (11)
[Fri Sep 18 08:12:13 2009] [notice] child pid 9202 exit signal Segmentation fault (11)
[Fri Sep 18 08:14:45 2009] [通知] 子 pid 9251 退出信号分段错误 (11)
它从我添加到 vhost.conf 文件的同一天开始。所以我恢复到原始文件并重新启动了 apache2ctl。不幸的是,它仍在发生。
Apache 似乎可以提供页面服务。
有任何想法吗?
干杯,
内森。
Sig11 通常仅出于以下两个原因之一发生:
糟糕的节目。
在 Apache 的情况下,它在统计上不太可能是核心 Apache 代码中的错误。
模块故障更为常见。无论是模块安全处理其正在处理的代码或库中的异常的方式。或者它与 Apache 选择的 MPM 模型交互的方式。当一个模块以这种方式行为不端时,它会在将数据返回给 Apache 子进程之前无法控制地退出,从而产生段错误。
查看自上次工作以来所做的所有更改。正如Lee B所说,这是使用版本控制的完美示例。
为了使事情稍微复杂化,您通常可以通过
graceful
在更改 Apache 的模块设置后发出 a 而不是完全重新启动来产生相同的行为。您可以通过停止和启动 Apache 来排除这种情况。硬件不好。
如果您确定错误与您的配置更改一致,并且您没有看到对系统的任何其他不良影响,那么您可能可以排除这种情况。但是,如果您用完了其他途径,则可能值得牢记。CPU 和 RAM 是典型的罪魁祸首。
内森,尝试停止 Apache,并在前台启动它(调试,非线程),这可能会泄露更多关于导致它的段错误的线索。
话虽如此,无论如何它都不应该出现段错误,因此这是一个错误,但是,如果您知道导致它的原因,它可能是您可以修复的。
此外(不太可能揭示此问题的全部原因),来自...的任何警告/错误
...?
最后,您是否已将所有已加载到 Apache 中的模块“认证”,也许您可以将其中的一半注释掉,看看问题是否消失,然后从那里进行分而治之的二进制搜索。
您还可能会在 /tmp 中查找由 segfault 产生的任何核心转储?如果您确实找到了一些,请尝试通过 gdb 运行它...
终于解决了这个问题。服务器的简单重新启动停止了 seg 故障。
感谢您的回答。我确信这对诊断未来的问题很有用。
内森。
我想这可能是一个加载有问题的模块。
我在使用 PHP 和 gettext php 扩展时遇到了相同的行为,它使 PHP 崩溃,因此 apache 的子进程正在为请求提供服务。
在花了几个小时试图找出我自己的分段错误错误的原因后,我开始随机禁用一些东西。在我的例子中,错误的原因是 Zend 的加速器。
由于我不需要此扩展程序,因此我将其禁用。如果您遇到同样的问题并需要此扩展程序,您可以尝试删除 eaccelerator 缓存并重新启动 httpd。
下次可以尝试使用 strace 或 truss