"[уведомление] ошибка сегментации выходного сигнала дочернего pid XXXX (11)" в журнале ошибок apache.[закрыто]


Я использую стек Apache/PHP/MySQL.
Использование в качестве фреймворка CakePHP.

Время от времени я получаю пустую белую страницу. Я не могу отладить его через Cake, поэтому я заглядываю в журнал ошибок apache.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
Author: Flimzy, 2011-10-12

3 answers

Присоедините 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
 55
Author: Mattias Wadman, 2011-10-13 10:15:51

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

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

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

 18
Author: phihag, 2011-10-12 19:46:11

Вы пытались увеличить буферизацию вывода в вашем php.ini?

Что означает "zend_mm_heap поврежден"?

 16
Author: Wayne, 2017-05-23 12:26:17