Ubuntu 12.10 (32 ビット) で Jetty 9 を実行しようとしています。JDK 1.7.0_40 で使用している JVM。RestLib を使用するサーバーに REST サービスをセットアップしました。残りのサービスは、データを受信するだけで処理を行わず、成功を返す POST メソッドです。
指定されたリソースで Jetty9 サーバーが受ける最大負荷を確認したいと思います。8 GB のメモリを搭載した Intel i5 プロセッサ ボックスを使用しています。localhost設定でこの残りをテストするためにJmeterをセットアップしました。これはお勧めできないことはわかっていますが、この数を知りたいです(好奇心から)。
JMeter を実行して、本文に 1 MB のペイロード データを含むこの POST メソッドをテストすると、約 20 (100 ユーザーの場合) のスループットが得られます。
最初にiperfを使用して帯域幅を測定しました
iperf -c 127.0.0.1 -p 8080
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 8080
TCP window size: 167 KByte (default)
[ 3] local 127.0.0.1 port 44130 connected with 127.0.0.1 port 8080
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 196 MBytes 165 Mbits/sec
165 MB という数字は、私にはとてつもなく小さいように思えますが、これは 1 つの観察事項です。
StatisticsHandler を有効にしてサーバーを実行し、リクエストの平均時間を観察していました。また、nmon 監視ツールを使用してシステム リソースを監視していました。
CPU 使用率は約 20% (全体)、4GB の空きメモリ、およびサーバー内のスレッド数 (jconsole を使用して監視) は約 200 でした (start.ini ファイルで最大スレッド数を 2000 に指定しました)。
Jmeter は、繰り返し砲撃するように構成されていました。
nmon ツールでローカル ループバック インターフェイスのネットワーク使用量を確認したところ、約 30 MB でした。これは、以前に引用した iperf データと一致していました。
weblogic (JDK 1.6 を使用) で同じ実験を試みたところ、lo インターフェイスで約 250 MBps を使用していました。テストをDOS攻撃と見なすシステムによる制限を回避するために、sysctl構成でtcp同期Cookieを明示的に無効にしました。
この数字を理解するのを手伝ってください。ここで設定に何かが欠けていますか?ここでは n/w が制限要因のようですが、これはループバック インターフェイスであるため、Weblogic のケースで証明されているように物理的な制限はありません。
Jetty 9 のケースで何が間違っているのかを理解するのを手伝ってください。
また、Jetty9 ログでこの警告が頻繁に表示されます
WARN:oejh.HttpParser:qtp14540840-309: 解析例外: java.lang.IllegalStateException: HttpChannelOverHttp@1dee6d3{r=1,a=IDLE,uri=-} のクローズ後のデータが多すぎます