最近我在我的网络服务器上收到了很多分段错误警告。
警告看起来像:
[notice] child pid xxxx exit signal Segmentation fault (11)
我咨询了服务器提供商(它是专用的 redhat 企业服务器),他们找不到任何东西。
到目前为止我做了什么:
由于错误我已经尝试了以下方法:
- 我添加了更多的内存
- 我已经关闭/打开了几个 php 模块(他们将我发送到有人遇到同样问题的网页,这是由过多的 php 模块引起的)
在警告发生的那一刻,似乎还有大量可用内存,并且进程数非常低(httpd 进程数约为允许的最大值的四分之一)。
什么可能导致这些错误?
编辑:当前版本
- 阿帕奇:2.0.52
- php: 5.2.8
- RHEL 4
编辑 2:虽然我很久以前就问过这个问题,但直到我升级到 php 5.3 才能够解决它。
好的,分段错误是程序错误的指示;这不是内存太少的问题。当程序试图访问它不允许访问的内存时,就会发生这种情况。
如果它发生在 Apache 中,您需要启用核心转储并重新启动 httpd 进程。在Apache 文档中有执行此操作的指南。
有助于诊断问题的一件事是,如果您尝试查找发生此错误时正在查看的页面/资源。如果您能够检查您的访问日志以查看在发生段错误的同时发生了什么。
某些 php 脚本或其他东西可能正在做一些导致崩溃的事情。一旦你弄清楚是什么页面/文件导致了崩溃,那么你就可以深入了解它在做什么,或者是否有可用的错误修复。
多次观察到“exit signal Segmentation fault (11)”错误。当 apache 崩溃时某些脚本未完成时,就会发生这种情况。
如果您在 apache 上使用基于 PHP 的网站,这很可能会发生。
如果您使用的是 PHP,请检查 conf.d/php.conf 中 php config 中的以下配置:
删除
LimitRequestBody
线。并观察。错误应该消失。此外,如果您将 apache 与 php 一起使用,则以下版本可以完美运行。apache 2.0.43 和 php 4.3.0_RC1
注意:这个答案纯粹是基于我过去对我所面临的错误和问题的研究。让我知道您当前的配置和反馈。
您最近是否更新了 apache 或其任何模块?我认为,当您有一个针对不同界面版本(在我的情况下为外籍人士)构建的 mod 时,我已经看到了这个问题。如果您可以将其缩小到几个软件,请检查所有版本信息。请参阅http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash
通常,当我看到这种情况时,它是由执行无限递归的 PHP 脚本引起的。您可以使用 error_log 上的时间戳来识别可能导致问题的 access_log 请求。如果那里有任何 PHP 脚本请求,您(或您的开发人员)应该查看这些页面,看看那里是否存在任何潜在问题。
吉姆。
前几天我最近遇到了一个错误,它与 MySQL 没有正确访问 Cacti 数据库有关。
文件 global_forms.php 中有一个数组,它将数组设置为键的值之一。该数组有一个键和一个称为函数的值,用于从数据库加载配置值。我从没想过这种组合会导致分段错误,但是在跟踪它之后没有其他原因。
您是否下载了正确的 mod_whatever?我有类似的情况,我为 Solaris 下载了 mod_jk,但是我运行的 Apache 是从 Sun 包含的,并且不是用 gcc 编译的,而是用他们的编译器编译的。我必须下载 mod\jk 源代码并使用 Sun 编译器进行编译。
我知道这是在黑暗中拍摄的,但由于没有答案被标记为已选择,我想我会把它扔在那里。
查看此博客条目以获取有关如何使用核心转储以查找 PHP 代码中的错误的详细信息:
http://www.omh.cc/blog/2008/mar/6/fixing-apache-segmentation-faults-caused-php/
这不是我的博文——我只是偶然发现它并发现它很有用。
斯科特