"[уведомление] child pid XXXX сигнал выхода Ошибка сегментации (11)" в apache error.log

Я использую стек 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)

Что это за ошибка сегментации, как я могу это исправить, я понятия не имею, и было бы замечательно.

UPDATE:

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

Ответ 1

Прикрепите 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

Ответ 2

Ошибка сегрегации - внутренняя ошибка в php (или, что менее вероятно, apache). Зачастую ошибка сегментации вызвана одним из новых и менее проверенных модулей php, таких как imagemagick или subversion.

Попробуйте отключить все несущественные модули (в php.ini), а затем повторно включите их один за другим до тех пор, пока не произойдет ошибка. Вы также можете обновить php и apache.

Если это не поможет, вы должны сообщить об ошибке php.