我正在使用 Jmeter 3.0 进行负载测试。每秒响应代码图向我展示了这样的锯齿图(50 个线程):
尝试使用 VisualVM 监视 java,加载类图和 gc 与之前的相关:
所以看起来 rps 只有在 Full GC 之后才会增长,然后下降。
我用 key -verbose:class > classes.txt 重新启动了 Jmeter,看看正在加载什么样的类。这个文件大部分都充满了数千个像这样的实体:
[Loaded org.mozilla.javascript.gen._cmd__128239 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128259 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128262 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128261 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128263 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128265 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128266 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128269 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128271 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128270 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128257 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128260 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128273 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128267 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128268 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128280 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128275 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128277 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
[Loaded org.mozilla.javascript.gen._cmd__128272 from file:/C:/apache-jmeter-3.0/lib/rhino-1.7.7.1.jar]
只有一件事有助于保持均匀负载,那就是减小堆大小或增加线程数(强制执行更频繁的 gc)。尝试了不同的 java 设置,最后一个是:
java -server -XX:+HeapDumpOnOutOfMemoryError -Xms2g -Xmx2g -XX:NewSize=128m -XX:MaxNewSize=512m -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50 -XX:MaxTenuringThreshold=2 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -verbose:class > classes.txt -jar ApacheJMeter.jar
最佳答案
你的回答已经有了原因和解决方法,只是总结一下。
- 增加JVM Heap占总可用 RAM 的 70-80%
- 使用Concurrent Mark Sweep Garbage Collector
- 在你的情况下考虑使用 JSR223 Test Elements与 Groovy language而不是 JavaScript
引用资料: 1. Apache JMeter Best Practices 2. 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure
关于java - Jmeter req/s 速率下降,加载 org.mozilla.javascript.gen._cmd__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356995/