10 台の異なるサーバーで API を実行していますが、それらはすべてファイアウォールの背後にあります。すべての http リクエストを処理するために jetty 8 を使用しています。この API の使用例は、短期間の接続です。
数か月前、ランダムToo many open file descriptors
エラーが発生し始めました。これらのエラーにより、サーバーが完全に応答しなくなります。これを修正するには、jetty サーバーを再起動する必要があります。今日、これは、私が得ているトラフィックに応じて、1日に0〜10回発生しました.
いくつかの調査の後、すべての接続が TIME_WAIT 状態でスタックしているため、新しい接続を作成できないため、利用可能な接続の数を使い果たしていることに気付きました。
ss -s
TCP: 13392 (estab 1549, closed 11439, orphaned 9, synrecv 0, timewait *11438*/0), ports 932
この例では、TIME_WAIT 状態の接続数はかなり少ないですが、最大 50k になる可能性があります。
私はいくつかのカーネル調整を試みてきました。また、Jetty ソケットの SO_LINGER タイマーを 1 秒に設定しようとしました。これらの変更はすべて頻度を減らすのに役立ちましたが、まだ定期的にエラーが発生しています.
また、言及する価値があるのは、各サーバーで毎秒約 3,000 のリクエストを受信しており、CPU 使用率が非常に低いことです。今日のトラフィックをスケーリングする際のボトルネックは、この接続の問題です。
それを正しく処理するために私ができることを知っている人はいますか?