我正在使用Apache / PHP / MySQL堆栈。 作为CakePHP框架使用。
我时不时地得到一个空白的白页。我无法通过Cake对其进行调试,因此我查看了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附加到httpd子进程之一,然后重新加载或继续工作并等待崩溃,然后查看回溯。做这样的事情:
$ 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附加到子进程之一,在本例中为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
应该给你一些线索,这是怎么回事。如果提交错误报告,则应包括回溯。
如果崩溃难以重现,则最好将Apache配置为仅使用一个子进程来处理请求。配置是这样的:
StartServers 1 MinSpareServers 1 MaxSpareServers 1