《【注意】子pid XXXX退出信号Segmentation fault (11)》在 apache error.log 中 [英] "[notice] child pid XXXX exit signal Segmentation fault (11)" in apache error.log
问题描述
我正在使用 Apache/PHP/MySQL 堆栈.
使用作为框架 CakePHP.
I am using Apache/PHP/MySQL stack.
Using as framework CakePHP.
我时不时地得到一个空白的白页.我无法通过 Cake 调试它,所以我查看了 apache error.log,这是我得到的:
Every now and then I get a blank white page. I can't debug it through Cake, so I peek in the apache error.log and here's what I get:
[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)
这是什么分段错误,我该如何修复?
What is this segmentation fault, and how can I fix it?
更新:
PHP Version 5.3.4, OSX local development
Server version: Apache/2.2.17 (Unix)
CakePhp: 1.3.10
推荐答案
将 gdb 附加到 httpd 子进程之一并重新加载或继续工作并等待崩溃然后查看回溯.做这样的事情:
Attach gdb to one of the httpd child processes and reload or continue working and wait for a crash and then look at the backtrace. Do something like this:
$ 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、...)
Now attach gdb to one of the child processes, in this case PID 690 (columns are 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
应该给你一些线索.如果您提交错误报告,则应包括回溯.
Should give you some clue what's going on. If you file a bug report you should include the backtrace.
如果崩溃很难重现,那么将 Apache 配置为仅使用一个子进程来处理请求可能是个好主意.配置是这样的:
If the crash is hard to reproduce it may be a good idea to configure Apache to only use one child processes for handling requests. The config is something like this:
StartServers 1
MinSpareServers 1
MaxSpareServers 1
这篇关于《【注意】子pid XXXX退出信号Segmentation fault (11)》在 apache error.log 中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!