NginxのTCPタイムアウト

NginxのTCPタイムアウト

私はProxmoxクラスタ(KVMを使用)で約60個のWebサーバーを実行しています。これらの仮想マシンは最新バージョンのDebian 11を実行します。彼らはnginx、PHP-FPM、およびMariaDBの異なるバージョンを使用しています。私はコードアプローチのインフラストラクチャに従い、インフラストラクチャのいくつかの例外(例:jitsi)を除いて、すべてのサーバーはansibleによって提供されるため、ほぼ同じです。私は標準のTypo3インストールだけでなく、通常Laravelで開発されているより複雑なアプリケーションをホストしています。しばらく前に、私はインフラストラクチャとライブカスタマープロジェクトのCheckMKでアクティブチェックを設定し始めました(これはcheck_httpというNagios用のプラグインを使用します)。これは外部からアクセスできることを意味します。

その後、1日に1〜2回タイムアウトエラーが発生し始めました。これは、アクティブチェックで監視した20台のサーバーにランダムに分散しているようです。最初はちょうどオタムだと思ったが、去る金曜日のジット時の集会中にそのようなことが起こり、仲間が私に知らせてくれました。 nginxのログを確認したところ、次のエントリは、Checkmkがサーバーに接続できなかった正確な時間が1分未満であることを示しています(検査間の時間、次の検査は常に負であるためエラーがないことを意味します)。ほんの数秒しかかかりません。この問題の原因は何ですか?どうすれば解決できますか?問題をより詳細に再現して分析する方法に関する提案はありますか?

mkエラーメッセージを確認してください。

要約アドレス195.34.XXX.XXXとポート443に接続中:接続が拒否されました。詳細 HTTP 致命的 - TCP ソケットを開けません。

mk-restoreメッセージを確認してください:

要約HTTP OK:HTTP / 1.1 200 OK - 0.008秒の応答時間で59404バイト

Nginxエラーログ:

2022/09/16 11:18:42 [警告] 3212994#3212994: *2590 接続5に残るオープンソケット #18

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2494 接続8に残っているオープンソケット #15

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2533 接続9に残るオープンソケット #16

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2534 接続10に残るオープンソケット #17

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2591 接続11に残っているオープンソケット #20

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2573 接続12に残るオープンソケット #24

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2532 接続13に残るオープンソケット #10

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3230 接続14に残っているオープンソケット #28

2022/09/16 11:18:42 [警告] 3212994#3212994: *2467 接続15に残るオープンソケット #19

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2535 接続16に残っているオープンソケット #21

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3233 接続17に残るオープンソケット #27

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2771 接続22に残っているオープンソケット #30

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2770 接続23に残るオープンソケット #29

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3234 接続24に残っているオープンソケット #22

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3229 接続26に残っているオープンソケット #11

2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3231 接続28に左オープンソケット #32

2022/09/16 11:18:42 [アラーム] 3212994#3212994: 中断中

2022/09/16 11:20:19 [エラー] 3295994#3295994: *153 応答の読み込み中のアップストリームタイムアウト(110:接続タイムアウト)>

ありがとう

ステファン・マルター・シュマッハ

ベストアンサー1

これは、「最大オープンファイル数のソフト制限」が小さすぎるために発生する可能性があります。 Debian では、デフォルトが 65536 から 1024 に変更されたことがわかりました。 nginxには十分ではないかもしれません。コンソールで次のように入力して確認します。

ulimit -n

nginxが使用する制限を確認するには、次のコマンドを入力してそのインスタンスのPIDを確認します。

 ps aux |grep nginx

次の行が表示されます。

www-data  148105  0.0  0.1  59100  5492 ?        S    Feb09   0:00 nginx: worker process

プロセスのPID(2番目の列)を取得したら、次の操作を行います。

cat /proc/[PID]/limits
     
cat /proc/148105/limits # in this example

検索ライン:

Max open files            8192                 8192                 files

8192の代わりに1024が表示された場合は、ngnix構成ファイル(nginx.conf)の先頭(基本セクション)に次の行を追加してください。

worker_rlimit_nofile 8192;

あなたはそれを観察することができます。より大きな数字を使用してください。最後に、ngnixデーモンを再起動し、上記の手順に従って新しい値を確認します。

おすすめ記事