Estou usando a pilha Apache / PHP / MySQL.
Usando como framework o CakePHP.
De vez em quando, recebo uma página em branco. Não consigo depurar por meio do Cake, então dou uma olhada no apache error.log e aqui está o que eu obtenho:
[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)
O que é essa falha de segmentação e como posso corrigi-la?
ATUALIZAR:
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
fonte
fonte
Respostas:
Anexe o gdb a um dos processos filho httpd e recarregue ou continue trabalhando e espere por um travamento e então olhe o backtrace. Faça algo assim:
...
Agora anexe gdb a um dos processos filhos, neste caso PID 690 (as colunas são UID, PID, PPID, ...)
Aguarde o travamento ... então:
Ou
Deve lhe dar alguma pista do que está acontecendo. Se você enviar um relatório de bug, deverá incluir o backtrace.
Se a falha for difícil de reproduzir, pode ser uma boa ideia configurar o Apache para usar apenas um processo filho para lidar com as solicitações. A configuração é mais ou menos assim:
fonte
dmesg
o pid do processo com falha de segmento.Unable to access task for process-id 70: (os/kern) failure.
set follow-fork-mode child
e anexe ao processo pai (aquele que gera processos filho) -> stackoverflow.com/questions/15126925/…Uma falha de segmentação é um erro interno no php (ou, menos provável, no apache). Freqüentemente, a falha de segmentação é causada por um dos módulos php mais novos e menos testados, como imagemagick ou subversion.
Tente desativar todos os módulos não essenciais (in
php.ini
) e, em seguida, reative-os um a um até que ocorra o erro. Você também pode querer atualizar o php e o apache.Se isso não ajudar, você deve relatar um bug de php .
fonte
mod-geoip
- eu agora uso a extensão geoip phpmod-geoip
). O problema continua? Em seguida, desative mais. Não vê mais nenhum segfaults? Ative mais módulos até que você faça. Se você tem inclinação técnica e tem um depurador, veja a excelente resposta de @Mathias Wadmann. Esteja ciente de que um depurador pode enganá-lo - às vezes, a falha pode ser em outro módulo.Você já tentou aumentar o output_buffering no seu php.ini?
O que significa "zend_mm_heap corrompido" ?
fonte
output_buffering = 4096
e agora as páginas funcionam novamente. Thxoutput_buffering = 8192
funciona. Muito obrigado!output_buffering = 8192
provoca segfault, que foi corrigido pela configuraçãooutput_buffering = Off
. Estou muito confuso.