Apache Seg障害(11)


8

私は私のapace error.logにこれを持っています:

[Fri Sep 18 08:10:54 2009] [通知]子pid 9178終了信号セグメンテーションエラー(11)
[Fri Sep 18 08:11:41 2009] [通知]子pid 9187終了信号セグメンテーションエラー(11)
[Fri 9月18日08:12:12 2009] [通知]子pid 9204終了信号セグメンテーションエラー(11)
[金9月18日08:12:13 2009] [通知]子pid 9202終了信号セグメンテーションエラー(11)
[9月18日金08:14:45 2009] [通知]子pid 9251終了信号セグメンテーションエラー(11)

vhost.confファイルに追加したのと同じ日に開始されました。そのため、元のファイルに戻し、apache2ctlを再起動しました。残念ながらそれはまだ起こっています。

Apacheはページを提供しているようです。

何か案は?

乾杯、

ネイサン。

回答:


5

Nathan、Apacheを停止してフォアグラウンドで起動してみてください(デバッグ、スレッド化されていません)。これにより、segfaultの原因に関するより多くの手掛かりが漏れる可能性があります。

とは言っても、segfaultは関係ありません。それはバグですが、原因がわかっている場合は修正できる可能性があります。

apache2 -X

また、(この問題の理由全体を明らかにすることはほとんどありません)、警告/エラー...

 apache2ctl -t

...?

最後に、Apache "Certified"にロードしたすべてのモジュールがあります。モジュールの約半分をコメントアウトして問題が解消するかどうかを確認し、そこから分割統治バイナリ検索を続行できます。

おそらく/ tmpで、segfaultから生成されたコアダンプを探すこともできますか?見つけた場合は、gdbで実行してみてください...

gdb apache2 -c /tmp/core.<pid>

ほとんどは良いアドバイスですが、間違ったmpmやバグの多いサードパーティモジュールの使用などを除外していない限り、これはApacheのバグだとは言えません。または、スレッドが別のユーザーまたはそのようなものとして実行されている場合は、ファイルに対する権限。本当に調べるべきことがたくさんあります。しかし、はい、デバッグログから始めます。ps:これが、apacheの設定をバージョン管理下に置くのが良い理由です;)
— Lee B

構文チェックは正常に戻ります。コア時間中にデバッグモードで再起動したくないので、サーバーの負荷が低いときに今夜試します。これまでの提案をありがとう。
— Nathan Friend

私は自分が書いたものを読んだだけで、Leeに同意します。Apacheのバグだと言って飛び込むことはしません。明確にすべきだったのは、バグはロードされたサードパーティのapacheモジュールの1つが所有していて、 Apache自体。:)
— Xerxes

5

Sig11は通常、次の2つの理由のいずれかでのみ発生します。

  • 悪いプログラム。

    Apacheの場合、コアApacheコードのバグである可能性は統計的にありません。

    モジュールの障害であることがより一般的です。モジュールが処理するコードまたはライブラリの例外を安全に処理する方法のいずれか。または、それがApacheの選択したMPMモデルと相互作用する方法。モジュールがこのように誤動作すると、Apache子プロセスにデータを返す前に制御不能に終了し、segfaultが生成されます。

    最後に機能してから行ったすべての変更を確認します。同様リーBこれはバージョン管理を使用するための完璧な例である、と言います。

    問題を少し複雑にするために、gracefulApacheのモジュール設定に変更を加えた後、完全な再起動の代わりにを発行することで、同じ動作を生成できることがよくあります。Apacheを停止して起動することで、これを除外できます。

  • 悪いハードウェア。

    エラーが構成の変更と一致し、システムに他の悪影響を与えていないことが確実な場合は、おそらくこれを除外できます。しかし、他の手段が足りなくなった場合は、心に留めておく価値があるかもしれません。CPUとRAMが典型的な原因です。


また、十分な空きスワップ領域がない状態で実行されているシステムでこのエラーが発生しました。システムログセグメントに他のプロセスもあり、障害があり、空きスワップ領域が不十分であると警告していました。
— try-catch-finally

3

最後にこれを修正しました。サーバーを再起動するだけで、seg障害が停止しました。

ご回答ありがとうございます。きっと将来の問題を診断するのに役立つでしょう。

ネイサン。


1

ロードされたモジュールに問題がある可能性があります。

私はPHPとgettext php拡張機能で同じ動作を経験しましたが、それはPHPをクラッシュさせていたため、Apacheの子がリクエストを処理していました。


1

私自身のセグメンテーションフォールトエラーの原因を解明するために何時間も費やした後、私はランダムに物事を無効にし始めました。私の場合、エラーの原因はZendのeacceleratorでした。

この拡張機能は必要ないので、無効のままにします。同じ問題があり、この拡張機能が必要な場合は、eacceleratorキャッシュを削除してhttpdを再起動してみてください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.