“儿童pid XXXX退出信号分割错误(11)”在apache error.log

我正在使用Apache / PHP / MySQL堆栈。
使用CakePHP作为框架。

我偶尔会得到一个空白的白页。 我不能通过Cakedebugging,所以我偷看了Apache的error.log,这里是我得到的:

[Wed Oct 12 15:27:23 2011] [notice] child pid 3580 exit signal Segmentation fault (11) [Wed Oct 12 15:27:34 2011] [notice] child pid 3581 exit signal Segmentation fault (11) [Wed Oct 12 15:30:52 2011] [notice] child pid 3549 exit signal Segmentation fault (11) [Wed Oct 12 16:04:27 2011] [notice] child pid 3579 exit signal Segmentation fault (11) zend_mm_heap corrupted [Wed Oct 12 16:26:24 2011] [notice] child pid 3625 exit signal Segmentation fault (11) [Wed Oct 12 17:57:24 2011] [notice] child pid 3577 exit signal Segmentation fault (11) [Wed Oct 12 17:58:54 2011] [notice] child pid 3550 exit signal Segmentation fault (11) [Wed Oct 12 17:59:52 2011] [notice] child pid 3578 exit signal Segmentation fault (11) [Wed Oct 12 18:01:38 2011] [notice] child pid 3683 exit signal Segmentation fault (11) [Wed Oct 12 22:20:53 2011] [notice] child pid 3778 exit signal Segmentation fault (11) [Wed Oct 12 22:29:51 2011] [notice] child pid 3777 exit signal Segmentation fault (11) [Wed Oct 12 22:33:42 2011] [notice] child pid 3774 exit signal Segmentation fault (11) 

这个分段错误是怎么回事,我怎么解决这个问题,我不知道会不会很棒。

更新:

 PHP Version 5.3.4, OSX local development Server version: Apache/2.2.17 (Unix) CakePhp: 1.3.10 

将gdb附加到其中一个httpdsubprocess并重新加载或继续工作,并等待崩溃,然后查看回溯。 做这样的事情:

 $ ps -ef|grep httpd 0 681 1 0 10:38pm ?? 0:00.45 /Applications/MAMP/Library/bin/httpd -k start 501 690 681 0 10:38pm ?? 0:00.02 /Applications/MAMP/Library/bin/httpd -k start 

现在将gdb附加到其中一个subprocess,在这种情况下是PID 690(列是UID,PID,PPID …)

 $ sudo gdb (gdb) attach 690 Attaching to process 690. Reading symbols for shared libraries . done Reading symbols for shared libraries ....................... done 0x9568ce29 in accept$NOCANCEL$UNIX2003 () (gdb) c Continuing. 

等待崩溃…然后:

 (gdb) backtrace 

要么

 (gdb) backtrace full 

应该给你一些线索是怎么回事。 如果你提交一个错误报告,你应该包括回溯。

如果崩溃很难重现,那么configurationApache只使用一个subprocess来处理请求可能是一个好主意。 configuration是这样的:

 StartServers 1 MinSpareServers 1 MaxSpareServers 1 

一个segementation错误是一个内部错误在PHP(或,不太可能,阿帕奇)。 通常情况下,分段错误是由较新的和较lesstesting的php模块之一引起的,例如imagemagick或subversion。

尝试禁用所有非必要模块(在php.ini ),然后重新启用它们,直到发生错误。 你也可能想更新PHP和Apache。

如果这没有帮助,你应该报告一个PHP错误 。

你有没有尝试增加你的php.ini中的output_buffering?

“zend_mm_heap损坏”是什么意思 ?