2

ハードウェアが許す限りの速さで何千もの http リクエストを行わなければならないプログラムがあります。現実の世界では、これらの接続はそれぞれ個別のサーバーに接続されますが、負荷をシミュレートするのに役立つテスト プログラムを作成しました (うまくいけば)。

私のプログラムは、Apache HttpClient を使用して http 要求を作成します。hereのスレッド化されたリクエストの実行例に基づいてコードを作成しました。

私のテスト プログラムは、Jetty を使用して http 要求を処理し、適切な応答を返します。ここにある HelloServlet のような単純な例に基づいてコードを作成しました。

テストを実行して jetty プロセスを監視すると、わずかな量の CPU リソースしか使用しません。さらに、VM を使用して jetty サーバーの 2 番目のインスタンスを実行したところ、半分近くの時間でテストが完了したことがわかりました。

Jetty の調整方法に関する情報を探したところ、このドキュメントが見つかりました。これらの手順に従いましたが、パフォーマンスが向上するようには見えませんでした。Jetty のパフォーマンスを向上させる方法に関するより良いドキュメントはありますか?

編集

実行中のアイドル スレッド数を表示するために、Jetty サーバーをインストルメント化しました。サーバーのスレッドプールを次のように構成しました。

server.setThreadPool(new ExecutorThreadPool(Executors.newFixedThreadPool(500)));

しかし、私のテスト プログラムでは、最大 490 のスレッドがアイドル状態であることがわかりました。私の製品コードは 2,000 のスレッドを使用していますが、jetty が接続をキューに入れているようです。

4

1 に答える 1

3

私ができる最善のガイダンスは、jetty の創設者である Greg Wilkins によるベンチマークに関するいくつかのブログを参照することです。正直なところ、上記のシナリオに合わせようとしても、実際の関心はあまり得られないためです。

http://webtide.intario.com/2010/06/lies-damned-lies-and-benchmarks-2/

http://webtide.intario.com/2012/05/truth-in-benchmarking/

また、現時点でサーブレットを改善するための主な方法は、サーブレットを非同期にすることです。これは単純に見えますが、他の多くのプログラミング上の問題を引き起こす可能性があります。代わりに SPDY や websockets などの最新のプロトコルを使用すると、多くの場合、パフォーマンスが大幅に向上します。

于 2013-03-13T13:59:14.270 に答える