「[notice] child pid XXXX exit signal Segmentation fault(11)」in apache error.log [closed]


100

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

設定に関する詳細情報が必要です。たとえば、phpのバージョンと使用されているモジュールが最新である場合や、何らかのキャッシュやアクセラレータを使用している場合などです。
CodeCaster、2011年

必要な情報とその入手方法を教えてください。投稿できますか?
mgPePe 2011年

:また、このチェックstackoverflow.com/questions/15689765/...
trante

最近、Apacheログにそれらの多くがあり、segfaultもありました(11)。私の原因はAPCであり、phpでAPCを再び無効にするとすぐにエラーが停止しました。しかし、あなたの原因には他にも多くの原因があります。
Meetai.com 2014年

回答:


66

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

1
私はこれに遭遇しましたが、子プロセスにgdbがアタッチされていると、segfaultが取得されず、Apacheがページのレンダリングを完了しません。(それ以外の場合、segfaultの再現は、リロードのたびに発生するため、リフレッシュを押すだけの問題です)。Cの時代に金属製のツールチェーンに近いところで作業してから久しぶりです。なぜこのような振る舞いをするのでしょうか。私のビルドから多くのシンボルが見つかりませんでしたが、それは単に情報量の少ないバックトレースを生成するだけでしょうか?
lucian303 2012

うーん、変だ。segfaultが実際に実行しているプロセスがgdbに接続されていることを確認できますか?dmesgsegfaultedプロセスのpidを確認します。
Mattias Wadman、

GDBが機能しません。くれますUnable to access task for process-id 70: (os/kern) failure.
mgPePe

これはOSXですか?たぶん、stackoverflow.com
questions / 11504377 /…を

2
解決策を見つけた:コールset follow-fork-mode childして、親プロセスにアタッチ(1をそのスポーンの子プロセス) - > stackoverflow.com/questions/15126925/...
maxgalbu

23

セグメンテーション違反は、php(または可能性は低いですが、apache)の内部エラーです。多くの場合、セグメンテーションフォールトは、imagemagickやsubversionなどの、テストされていない新しいphpモジュールの1つが原因です。

必須ではないすべてのモジュールを無効にして(でphp.ini)、エラーが発生するまで1つずつ再度有効にします。phpとapacheを更新することもできます。

それでも問題が解決しない場合は、phpバグ報告してください。


しかし、どのようにしてそれを知ることができますか?
mgPePe 2013

私(Debian Stretch)では、Apacheモジュールでしたmod-geoip

@mgPePeそれがどれであるかを見つけるには、すべての必須ではないモジュールを無効にします(外部で開発されたすべてのモジュールから始めますmod-geoip)。問題は継続しますか?その後、無効にします。segfaultが表示されなくなりましたか?必要になるまで、さらにモジュールを有効にします。技術的な傾向があり、デバッガーを持っている場合は、@ Mathias Wadmannの優れた答えを参照してください。ただし、デバッガーが誤解を招く可能性があることに注意してください。別のモジュールでクラッシュが発生する場合もあります。
phihag 2018年

18

php.iniのoutput_bufferingを増やしてみましたか?

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


4
更新後のapache / php / mysqlでのdebian squeezeで同じ問題が発生しました。に設定するoutput_buffering = 4096と、ページが再び機能します。Thx
rubo77

3
そして私にとってはoutput_buffering = 8192働くだけです。どうもありがとう!
Oleg

2
そして今、別のページでoutput_buffering = 8192segfaultが発生しますoutput_buffering = Off。これはを設定することで修正されました。私はたくさん混乱しています。
Oleg

1
それは数年後ですが、私と同じようにこれに遭遇した他の人にとっては...サーバーの出力バッファリングをオフにしてから、htaccessファイルを使用してディレクトリベースまたはファイルベースの編集を行う方法がわかりました。出力バッファリングは、ユーザーに投稿する前に保持するデータ量を決定します。小さなワンライナーの場合、これによりエラーが発生する可能性があります。大きなファイルでは、プロセスが過負荷になるリスクがあります。
放棄されたカート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.