webentwicklung-frage-antwort-db.com.de

"[notice] child pid XXXX exit signal Segmentierungsfehler (11)" in Apache error.log

Ich benutze Apache/PHP/MySQL Stack.
CakePHP als Framework verwenden.

Hin und wieder bekomme ich eine leere weiße Seite. Ich kann es nicht über Cake debuggen, deshalb schaue ich im Apache-error.log nach und erhalte Folgendes:

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

Was ist dieser Segmentierungsfehler und wie kann ich ihn beheben?

AKTUALISIEREN:

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

Hängen Sie gdb an einen der untergeordneten httpd-Prozesse an, laden Sie ihn neu oder arbeiten Sie weiter und warten Sie auf einen Absturz. Schauen Sie sich dann den Backtrace an. Mach so etwas:

$ 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

...

Verbinden Sie nun gdb mit einem der untergeordneten Prozesse, in diesem Fall PID 690 (Spalten sind 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.

Warte auf einen Absturz ... dann:

(gdb) backtrace

Oder

(gdb) backtrace full

Sollte dir einen Hinweis geben, was los ist. Wenn Sie einen Fehlerbericht einreichen, sollten Sie die Rückverfolgung einschließen.

Wenn sich der Absturz nur schwer reproduzieren lässt, empfiehlt es sich möglicherweise, Apache so zu konfigurieren, dass nur ein untergeordneter Prozess für die Verarbeitung von Anforderungen verwendet wird. Die Konfiguration sieht ungefähr so ​​aus:

StartServers 1
MinSpareServers 1
MaxSpareServers 1
63
Mattias Wadman

Ein Segmentierungsfehler ist ein interner Fehler in PHP (oder weniger wahrscheinlich in Apache). Oft wird der Segmentierungsfehler durch eines der neueren und weniger getesteten PHP-Module wie imagemagick oder Subversion verursacht.

Deaktivieren Sie alle nicht unbedingt erforderlichen Module (in php.ini), und aktivieren Sie sie dann einzeln, bis der Fehler auftritt. Möglicherweise möchten Sie auch PHP und Apache aktualisieren.

Wenn das nicht hilft, solltest du einen PHP-Fehler melden .

20
phihag

Haben Sie versucht, output_buffering in Ihrer php.ini zu erhöhen?

Was bedeutet "zend_mm_heap corrupted" ?

16
Wayne