Apache Seg 故障 (11)

Nat*_*end 8 apache-2.2

我在我的 apace 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] [notice] child pid 9251 exit signal Segmentation fault (11)

它在我添加 vhost.conf 文件的同一天开始。于是我恢复到原来的文件做了一个apache2ctl重启。不幸的是,它仍在发生。

Apache 似乎正在为页面提供服务。

有任何想法吗?

干杯,

内森。

Xer*_*xes 5

Nathan,尝试停止 Apache,并在前台启动它(调试,非线程),这可能会泄露更多关于导致段错误的线索。

话虽如此,无论如何它都不应该出现段错误,所以它是一个错误,但是,如果您知道是什么导致了它,它可能是您可以修复的。

apache2 -X
Run Code Online (Sandbox Code Playgroud)

此外(不太可能揭示此问题的全部原因),来自...的任何警告/错误

 apache2ctl -t
Run Code Online (Sandbox Code Playgroud)

……?

最后,您加载到 Apache 中的所有模块都“经过认证”了吗,也许您可​​以将其中的一半注释掉,看看问题是否消失,然后从那里继续进行分而治之的二进制搜索。

您还可以查找由段错误产生的任何核心转储,也许在 /tmp 中?如果您确实找到了一些,请尝试通过 gdb 运行它...

gdb apache2 -c /tmp/core.<pid>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ley 5

Sig11 通常仅出于以下两个原因之一而发生:

  • 坏程序。

    在 Apache 的情况下,统计上不太可能是核心 Apache 代码中的错误。

    模块故障更为常见。无论是模块安全地处理它正在处理的代码或库中的异常的方式。或者它与 Apache 选择的 MPM 模型交互的方式。当模块以这种方式行为不端时,它会在将数据返回给 Apache 子进程之前无法控制地退出,从而产生段错误。

    查看自上次生效以来所做的所有更改。正如Lee B所说,这是使用版本控制的完美示例。

    稍微复杂一点的是,您通常可以通过graceful在更改 Apache 的模块设置后发出而不是完全重新启动来产生相同的行为。您可以通过停止和启动 Apache 来排除这种情况。

  • 硬件不好。

    如果您确定错误与您的配置更改一致,并且您没有看到对系统的任何其他不良影响,那么您可能可以排除这种情况。但是,如果您没有其他途径,则可能值得考虑。CPU 和 RAM 是典型的罪魁祸首。


Nat*_*end 4

终于解决了这个问题。简单地重新启动服务器即可停止段故障。

感谢您的回答。我确信这对于诊断未来的问题很有用。

内森。