107 votes

"[notice] pid enfant XXXX signal de sortie faute de segmentation (11)" dans apache error.log

J'utilise la pile Apache / PHP / MySQL.
Utiliser comme framework CakePHP.

De temps en temps, je reçois une page blanche. Je ne peux pas le déboguer via Cake, alors je jette un œil dans le journal apache error.log et voici ce que je reçois:

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

Quelle est cette faute de segmentation, comment puis-je résoudre ce problème, je n'ai aucune idée et serait très reconnaissant.

METTRE À JOUR:

 PHP Version 5.3.4, OSX local development
Server version: Apache/2.2.17 (Unix)
CakePhp: 1.3.10
 

67voto

Mattias Wadman Points 6542

Joindre gdb pour l'un des httpd enfant de processus et de le recharger ou de continuer à travailler et attendre un crash et puis regardez à la trace. Faire 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

...

Maintenant, montez gdb pour l'un des processus enfants, 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.

Attendre 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 crash est difficile à reproduire, il peut être une bonne idée de configurer Apache pour utiliser un seul enfant, les processus de traitement des demandes. La config est quelque chose comme ceci:

StartServers 1
MinSpareServers 1
MaxSpareServers 1

24voto

phihag Points 89765

Une faute de segmentation est une erreur interne en php (ou, moins probable, apache). Souvent, la faute de segmentation est causée par l’un des modules php les plus récents et les moins testés, tels que imagemagick ou subversion.

Essayez de désactiver tous les modules non essentiels (en php.ini ), puis de les réactiver un par un jusqu'à ce que l'erreur se produise. Vous voudrez peut-être aussi mettre à jour php et apache.

Si cela ne vous aide pas, vous devriez signaler un bogue php .

18voto

Wayne Khan Points 875

Avez-vous essayé d'augmenter le buffer de sortie dans votre php.ini?

Que signifie "zend_mm_heap corrompu" ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X