Estoy usando la pila Apache / PHP / MySQL.
Usando como marco CakePHP.
De vez en cuando me sale una página en blanco. No puedo depurarlo a través de Cake, así que eché un vistazo al apache error.log y esto es lo que obtengo:
[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)
¿Qué es este error de segmentación y cómo puedo solucionarlo?
ACTUALIZAR:
PHP Version 5.3.4, OSX local development
Server version: Apache/2.2.17 (Unix)
CakePhp: 1.3.10
php
apache
cakephp
error-logging
mgPePe
fuente
fuente
Respuestas:
Adjunte gdb a uno de los procesos secundarios httpd y vuelva a cargar o continúe trabajando y espere a que se bloquee y luego mire el backtrace. Haz algo como esto:
...
Ahora adjunte gdb a uno de los procesos secundarios, en este caso PID 690 (las columnas son UID, PID, PPID, ...)
Espere el choque ... luego:
O
Debería darte una pista de lo que está pasando. Si presenta un informe de error, debe incluir el rastreo.
Si la falla es difícil de reproducir, puede ser una buena idea configurar Apache para que solo use un proceso secundario para manejar las solicitudes. La configuración es algo como esto:
fuente
dmesg
el pid del proceso segmentado.Unable to access task for process-id 70: (os/kern) failure.
set follow-fork-mode child
y luego adjunte al proceso principal (el que genera procesos secundarios) -> stackoverflow.com/questions/15126925/…Una falla de segmentación es un error interno en php (o, menos probablemente, apache). A menudo, la falla de segmentación es causada por uno de los módulos php más nuevos y menos probados, como imagemagick o subversion.
Intente deshabilitar todos los módulos no esenciales (en
php.ini
) y luego vuelva a habilitarlos uno por uno hasta que se produzca el error. Es posible que también desee actualizar php y apache.Si eso no ayuda, debe informar un error de php .
fuente
mod-geoip
- ahora uso la extensión php geoip en su lugarmod-geoip
). ¿Continúa el problema? Luego deshabilite más. ¿No ve más segfaults? Habilite más módulos hasta que lo haga. Si tiene inclinaciones técnicas y tiene un depurador, consulte la excelente respuesta de @Mathias Wadmann. Sin embargo, tenga en cuenta que un depurador puede engañarlo; a veces, el bloqueo puede estar en otro módulo.¿Ha intentado aumentar el output_buffering en su php.ini?
¿Qué significa "zend_mm_heap corrupto" ?
fuente
output_buffering = 4096
y ahora las páginas funcionan nuevamente. Thxoutput_buffering = 8192
funciona. ¡Muchas gracias!output_buffering = 8192
causa segfault, que se corrigió con la configuraciónoutput_buffering = Off
. Estoy muy confundido.