"[avis] enfant pid XXXX signal de sortie Segmentation fault (11)" dans des erreurs d'apache.log [fermé]

J'utilise la pile Apache/PHP/MySQL.

En utilisant comme framework CakePHP.

de temps en temps, je reçois une page blanche. Je ne peux pas le déboguer à travers Cake, donc je regarde dans l'erreur apache.journal et voici ce que j'obtiens:

[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)

Quel Est ce défaut de segmentation, et comment puis-je le corriger?

mise à jour:

PHP Version 5.3.4, OSX local development
Server version: Apache/2.2.17 (Unix)
CakePhp: 1.3.10
83
demandé sur Flimzy 2011-10-12 23:38:44

3 réponses

fixer gdb à l'un des processus enfant httpd et recharger ou continuer à travailler et attendre un crash et puis regarder la boucle arrière. Faites quelque chose comme ceci:

$ 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

...

attache maintenant gdb à l'un des processus enfant, dans ce cas PID 690 (les colonnes sont 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.

attendez crash... puis:

(gdb) backtrace

ou

(gdb) backtrace full

Devrait te donner une idée de ce qui se passe. Si vous remplissez un rapport de bogue, vous devez inclure la trace.

si le plantage est difficile à reproduire, il peut être judicieux de configurer Apache pour qu'il n'utilise qu'un seul processus enfant pour traiter les requêtes. La configuration est quelque chose comme ceci:

StartServers 1
MinSpareServers 1
MaxSpareServers 1
55
répondu Mattias Wadman 2011-10-13 10:15:51

un défaut de segementation est une erreur interne dans php (ou, moins probablement, apache). Souvent, la faille de segmentation est causée par l'un des modules php les plus récents et les moins testés, comme imagemagick ou subversion.

essayez de désactiver tous les modules non essentiels (dans php.ini ), puis de les réactiver un par un jusqu'à ce que l'erreur se produise. Vous pouvez également mettre à jour php et apache.

si cela ne vous aide pas, vous devriez signaler un php bug .

18
répondu phihag 2011-10-12 19:46:11

Avez-vous essayé d'augmenter output_buffering dans votre php.ini?

Qu'est-ce que "zend_mm_heap corrompu" signifie ?

16
répondu Wayne 2017-05-23 12:26:17