web-dev-qa-db-ja.com

Apache error.logの「[notice] child pid XXXX exit signal Segmentation fault(11)」

Apache/PHP/MySQLスタックを使用しています。
フレームワークCakePHPとして使用。

時々、空白の白いページが表示されます。 Cakeでデバッグできないので、Apache error.logを覗いてみると、次のようになります。

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

このセグメンテーションフォールトとは何ですか。どうすれば修正できますか?

更新:

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

Httpd子プロセスの1つにgdbを接続し、リロードするか、作業を続行してクラッシュを待ち、バックトレースを確認します。このようなことをしてください:

$ 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

...

次に、gdbを子プロセスの1つ、この場合はPID 690(列は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.

クラッシュを待つ...その後:

(gdb) backtrace

または

(gdb) backtrace full

何が起こっているのかを知る手掛かりになるはずです。バグレポートを提出する場合、バックトレースを含める必要があります。

クラッシュを再現するのが難しい場合は、リクエストの処理に1つの子プロセスのみを使用するようにApacheを構成することをお勧めします。構成は次のようなものです。

StartServers 1
MinSpareServers 1
MaxSpareServers 1
63
Mattias Wadman

セグメンテーション違反は、PHPの内部エラーです(または、あまりありませんが、Apache)。多くの場合、セグメンテーションフォールトは、imagemagickやSubversionなどのより新しく、よりテストされていないphpモジュールの1つによって引き起こされます。

php.iniにある)すべての非必須モジュールを無効にしてから、エラーが発生するまでそれらを1つずつ再度有効にしてください。 phpとApacheを更新することもできます。

それでも解決しない場合は、 phpのバグを報告する とする必要があります。

20
phihag

Php.iniのoutput_bufferingを増やしようとしましたか?

「zend_mm_heap破損」とはどういう意味ですか

16
Wayne