11

私はApacheのJmeterを使用してテストしています.会社のWebサイトの1ページにアクセスし、しきい値に達するまでユーザー数を増やすだけです.問題は、スレッドが約3000に達すると、JMeterがすべてを実行しないことです.彼ら。Aggregate Graph を見ると、約 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 でヒープ サイズを変更してみましたが、まったく役に立たなかったようです。

4

6 に答える 6

13

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

いくつかの選択肢があります:

  • JVMオプションを試してみてください。たとえば、デフォルトを小さくしてください-Xss512K

  • クラスタで JMeter を実行する

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

于 2013-01-30T18:21:46.507 に答える
5

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

set HEAP=-Xms1024m -Xmx1024m
于 2013-04-24T08:20:19.607 に答える
3

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

  • 64 ビット jvm に切り替えます ( > 6_u25)

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

  • Xss を次のように減らします。

-Xss256k

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

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

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

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

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

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

于 2013-01-30T23:08:44.607 に答える
2

jmeter.bat でヒープ サイズを大きくするとうまく動作します set HEAP=-Xms1024m -Xmx1024m

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

于 2014-09-17T13:48:31.570 に答える
2

私はこの同じ問題に遭遇し、私を助けた唯一の解決策は: https://stackoverflow.com/a/26190804/5796780

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
于 2016-04-26T22:03:33.040 に答える