web-dev-qa-db-ja.com

多数のスレッドを実行するときのJMeterの問題

私はApacheのJmeterを使用してテストしています。会社のWebサイトの1つのページにアクセスし、しきい値に達するまでユーザー数を増やしています。問題は、スレッド数が3000に達するとJMeterがすべてを実行しないことです。それら。集計グラフを見ると、実行されるのは約2,536(この数はさまざまですが、常にここにあります)です。

部分的な実行では、ログに次の例外が発生します。

01:16 ERROR - jmeter.JMeter: Uncaught exception: 
Java.lang.OutOfMemoryError: unable to create new native thread
    at Java.lang.Thread.start0(Native Method)
    at Java.lang.Thread.start(Unknown Source)
    at org.Apache.jmeter.threads.ThreadGroup.start(ThreadGroup.Java:293)
    at org.Apache.jmeter.engine.StandardJMeterEngine.startThreadGroup(StandardJMeterEngine.Java:476)
    at org.Apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.Java:395)
    at Java.lang.Thread.run(Unknown Source)

この動作は一貫しています。さらに、JMeterが途中でクラッシュして、次のようなファイルを出力したことがありました。

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (allocation.cpp:211), pid=10748, tid=11652
#
# JRE version: 6.0_31-b05
# Java VM: Java HotSpot(TM) Client VM (20.6-b01 mixed mode, sharing windows-x86 )

何か案は?
jmeter.batのヒープサイズを変更しようとしましたが、まったく役に立たなかったようです。

11
Irony

JVMは単純に 非常に多くのスレッドを実行する に対応していません。そして、そうであっても、JMeterはコンテキストを純粋に切り替えるために大量のCPUリソースを消費します。言い換えると、あるポイントを超えると、Webアプリケーションのベンチマークではなく、JMeterをホストしているクライアントコンピューターをベンチマークしていることになります。

あなたにはいくつかの選択肢があります:

  • jVMオプションを試してみてください。 減少デフォルト-Xss512K小さいものへ

  • 実行 クラスター内のJMeter

  • ガトリング のような根本的に異なるアプローチを取るツールを使用する

13

同様の問題があり、jmeter.batのヒープサイズを1024Mに増やして、問題を修正しました。

set HEAP=-Xms1024m -Xmx1024m
4
Siva

JVMの場合、hprofを読むと、次のような解決策が得られます。

  • 64ビットのjv​​mに切り替える(> 6_u25)

  • これにより、より多くのヒープ(-Xmx)を割り当てることができます。このRAMがあることを確認してください

  • xssを削減するには:

-Xss256k

次に、JMeterのベストプラクティスに従います。

最後に、最新のJMeterバージョンを使用していることを確認してください。

  • できればLinux OSを使用してください

  • TCPスタック、制限を調整する

成功は、マシンのパワー(CPUとメモリ)とテスト計画に依存します。

これで十分でない場合(3000スレッドでは問題ないはずです)、分散テストを使用する必要がある場合があります。

3
UBIK LOAD PACK

Jmeter.batのヒープサイズを増やすと、HEAP = -Xms1024m -Xmx1024mに設定できます。

または、jmeter.shを使用している場合は、JVM_ARGS = "-Xms512m -Xmx1024m" jmeter.shなどのように次のように実行できます。

2
swathy valluri

私はこれと同じ問題に遭遇し、私を助けた唯一の解決策は次のとおりです: https://stackoverflow.com/a/26190804/579678

linuxでの適切な100kスレッド:

ulimit -s  256
ulimit -i  120000
echo 120000 > /proc/sys/kernel/threads-max
echo 600000 > /proc/sys/vm/max_map_count
echo 200000 > /proc/sys/kernel/pid_max 

Rootアクセス権がない場合:

echo 200000 | Sudo dd of=/proc/sys/kernel/pid_max
1
Vijay