web-dev-qa-db-ja.com

Nginxが突然動作を停止し、理由が見つかりません

デバッグ方法がわからないという複雑な問題があります。私のprodサーバーでは、ページ速度でソースからコンパイルされたnginxがあります。そして、すべてが正常に機能しますが、パターンを識別できない場合があり、エラーログにエラーが発生することなくnginxが機能を停止します。

error_log /usr/local/nginx/localhost-error.log;

HTOPを実行すると、nginxに関連するpidが見つからないため、この問題が発生するたびに手動でnginxを起動する必要があります。

Nohup /usr/local/nginx/sbin/nginx &

それ以外の場合、nginxは正常に機能します。重要かどうかはわかりませんが、基本認証に対してブルートフォース攻撃を受けることがありますが、3回間違って試行した後、失敗を使用します。

この問題の理由をどのように見つけることができますか?


nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

nginx version: nginx/1.10.1
1
user2990084

詳細情報が必要

これ以上の情報がなければ、問題が何であるかを正確に言うことは困難です。ただあなたの方法でいくつかの考えを投げるつもりです。より多くの情報であなたの投稿を編集してください、そして多分私達はそれを理解することができます。

質問

  1. Nginxはどのように実行されていますか?サービスを使用して実行されていますか、それともアドホックな方法を使用していますか?
    • Init(upstart、systemdなど)によって実行されている場合、(通常は?)再起動されているプロセスに関する何かをログに記録します。そうでない場合は、initジョブを確認して、開始/停止したときのログ印刷を追加できます。
  2. /var/log/syslogに関連するものはありますか?
  3. stdout/stderrをnginxから保存します。このようなもの。多分それが再び起こるときあなたは何か面白いものを捕まえるでしょう。 Nohup /usr/local/nginx/sbin/nginx >> /var/log/nginx.out 2>&1 &
  4. Nginxが死ぬのを見るたびにログに記録するスクリプトを実行します。次に、これを使用して、システム上の他のイベントと相関させることができます。

    while true; do
        NUM_INSTANCES=$(ps -A | grep nginx | wc -l)
        if [[ "$NUM_INSTANCES" == 0 ]]; then
             echo "$(date) nginx just died" >> /var/log/syslog
        fi
        sleep 1
    done
    

    echoをロガー呼び出しに置き換えることもできます。同様のスクリプトを使用してシステムをデバッグしました。シェルではなくスクリプトファイルでこれを実行してください。そうすれば、killall <scriptname>.shを実行して強制終了できます。

また、nginxデバッグページの情報の一部が役立つ場合があります。 https://www.nginx.com/resources/wiki/start/topics/tutorials/debugging/

1
BobTuckerman