このアプリケーションでは、起動時にさまざまなリモート サーバーによって約 1,600 の永続的な HTTP 接続が開かれる HTTP サーバーを構築する必要があり、数千の HTTP POST リクエストのストリームが約 30 の間、各接続にすばやく連続して送信されます。秒 - それぞれに応答するのに数ミリ秒しかかかりません。30 秒後に接続が閉じられ、別の接続が開かれます。
Netty を選択したのは、ほとんどのアカウントで効率的な HTTP サーバーの構築に適しているためです。
HTTP サーバーの実装では、Netty HTTP サーバーのSnoopの例に従いました。
残念ながら、Netty の過負荷によって説明される可能性のある問題が発生しているため、特にスレッドの処理方法において、適切に構成されているかどうかを再検討しています。サーバーを次のように構成します。
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
リクエストを受信すると、SimpleChannelUpstreamHandler で messageReceived() を呼び出すのと同じスレッド内で処理します。
このアプローチは、アプリケーションで機能する必要がありますか?
編集:障害が発生している間のボックスの負荷平均は 0.05 で、非常に低いです。Java プロセスに 4GB を割り当てましたが、ほとんど使用されていません。したがって、基本的に、ボックスは完全に過負荷です。