Я использую стек 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
Ошибка сегрегации – внутренняя ошибка в php (или, что менее вероятно, apache). Часто отказ сегментации вызван одним из новых и менее проверенных модулей php, таких как imagemagick или subversion.
Попробуйте отключить все несущественные модули (в php.ini
), а затем повторно включите их один за другим до тех пор, пока не произойдет ошибка. Вы также можете обновить php и apache.
Если это не поможет, вы должны сообщить об ошибке php .
Вы пытались увеличить output_buffering в php.ini?
Что означает «zend_mm_heap corrupted» ?