2017-02-08 16 views
0

おそらく説明は簡単ですが、私の質問に答えが見つかりませんでした:jmeterとapachetop - 異なる値が表示されるのはなぜですか?

私は1つのVM(ワーカー)から別の(ターゲット)までjmeterテストを実行しています。私は100人のスレッド(100人のユーザー)とjmeterを持っています。私はApache上で動作するAPIを持っています。ターゲット上で "apachetop -f access_log"を実行すると、約7 req/sしか表示されません。 誰かが私に説明することができます、なぜ私は目標に100 req/sが表示されませんか?

jmeterのテスト結果では、常に200 OKと表示されるため、すべてのリクエストがターゲットにヒットし、さらにターゲットが常に応答します。だから私はここでどんな要求も落としていません。マシン間のネットワーク帯域幅は1Gです。私はここで何が欠けているのですか?これは、

おかげで、 パパ

+0

JMeterでは、平均とスループットについて何が表示されますか(たとえば、サマリーレポートを使用します)? –

答えて

1

100人のユーザーが必ずしも100個/秒のリクエストを意味するとは限りません。 JMeter glossaryによると

経過時間。 JMeterは、リクエストを送信する直前から最後のレスポンスを受信した直後までの経過時間を測定します。 JMeterには、応答のレンダリングに必要な時間は含まれておらず、JMeterはクライアントコード(Javascriptなど)を処理しません。

JMeterが1秒間にサーバーから応答を受け取ることができれば、100リクエスト/秒が得られます。応答時間が2秒の場合、スループットは50リクエスト/秒、応答時間4秒 - 25リクエスト/秒などとなります。

また、JMeterの設定も重要です。十分なループを用意していないと、すでにいくつかのスレッドが終了していて、起動されていないスレッドが存在する状況に陥る可能性があります。詳細な説明は、JMeter Test Results: Why the Actual Users Number is Lower than Expectedの記事を参照してください。

+0

ありがとう!実際には、あなたは両方とも正しいです。JMeterの100人のユーザーが、1秒あたり100リクエストを目標にするわけではありません。私の場合は、ターゲットからの応答が遅いため(平均13秒)、約7req/secの値でした。要約レポート(および一部のリスナーがグラフの応答時間を表示する)を有効にすると、すべてが明確になります。 – GoDaddyGo

1
Your target load = 100 threads (you are assuming it should generate 100 req/sec as per your plan) 
Your actual load = 7 req/sec = 7*3600/hour = 25200 
Per thread throughput = 25200/100 threads = 252 iterations/thread/hour 
Per transaction time = 3600/252 = 14.2 secs 

は、JMeterは実際にはそれぞれのリクエストにスレッドごとに、すべての14秒を送信する必要があります。すなわち、14.2秒ごとに100個の要求を送信する。

ここで、トランザクションタイマーのJMeterサマリーレポートを分析して、残りの13.2秒が費やされている場所を確認します。

可能性のある問題は、1.高DNS解決時間(DNSの問題) 2.高接続設定時間は(ロードバランサの問題を示す) 3.高要求されている時間を送る(N/Wまたはファイアウォールスロットリングの問題を示す) 4高い要求受信時間(#3と同じ)

Apacheログに表示される時間は、ほとんどの場合、最初のバイト時間までの時間としてJMeterに表示されます。私はあなたのテストを実行しているマシンについてはわかりません。ワーカーがカールをサポートできる場合は、Curlを使用して単一の要求のコンポーネントを検索します。

echo 'request payload for POST' 
| curl -X POST -H 'User-Agent: myBrowser' -H 'Content-Type: application/json' -d @- -s -w '\nDNS time:\t%{time_namelookup}\nTCP Connect time:\t%{time_connect}\nAppCon Protocol time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' http://mytest.test.com 

上記の出力がこのような問題を示していない場合は、JMeter内で時間が過ぎている必要があります。 beanshell/JSR223などのさまざまなオプションを使用してJMeterの実装を調整する必要があります。

関連する問題