私は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のヒープサイズを変更しようとしましたが、まったく役に立たなかったようです。
JVMは単純に 非常に多くのスレッドを実行する に対応していません。そして、そうであっても、JMeterはコンテキストを純粋に切り替えるために大量のCPUリソースを消費します。言い換えると、あるポイントを超えると、Webアプリケーションのベンチマークではなく、JMeterをホストしているクライアントコンピューターをベンチマークしていることになります。
あなたにはいくつかの選択肢があります:
jVMオプションを試してみてください。 減少デフォルト-Xss512K
小さいものへ
ガトリング のような根本的に異なるアプローチを取るツールを使用する
同様の問題があり、jmeter.batのヒープサイズを1024Mに増やして、問題を修正しました。
set HEAP=-Xms1024m -Xmx1024m
JVMの場合、hprofを読むと、次のような解決策が得られます。
64ビットのjvmに切り替える(> 6_u25)
これにより、より多くのヒープ(-Xmx)を割り当てることができます。このRAMがあることを確認してください
xssを削減するには:
-Xss256k
次に、JMeterのベストプラクティスに従います。
最後に、最新のJMeterバージョンを使用していることを確認してください。
できればLinux OSを使用してください
TCPスタック、制限を調整する
成功は、マシンのパワー(CPUとメモリ)とテスト計画に依存します。
これで十分でない場合(3000スレッドでは問題ないはずです)、分散テストを使用する必要がある場合があります。
Jmeter.batのヒープサイズを増やすと、HEAP = -Xms1024m -Xmx1024mに設定できます。
または、jmeter.shを使用している場合は、JVM_ARGS = "-Xms512m -Xmx1024m" jmeter.shなどのように次のように実行できます。
私はこれと同じ問題に遭遇し、私を助けた唯一の解決策は次のとおりです: 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