这与JMeter的循环计数行为有关。
我第一次使用JMeter加载测试我的新Web应用程序 首先,我已将JMeter配置为访问一个简单的xhtml页面(home.xhtml)。
Load configuration in JMeter:
Number of threads (users): 100
Ramp-Up period (in seconds): 1
Loop count: 100
通过上述配置,我试图模拟100 users
每次访问主页URL 100次。我希望这可以模拟一个测试条件,其中100个不同的用户打开100个浏览器窗口,每个用户每次with the same browser window
访问URL 100次。因此,理想情况下,这应该只创建100个会话。但是在测试结束时的堆转储中,我注意到有10,000(100 x 100)个会话对象。
会话实例的课程:org.apache.catalina.session.StandardSession
此行为导致Tomcat JVM在更高负载时出现堆内存不足错误(例如1000个循环计数为1000的用户)。在我的测试期间,旧的堆(使用JDK附带的VisualGC工具进行监视)继续增长,最终导致堆内存不足错误。
使用的软件:
Tomcat 7.0.47
JSF 2.2 (Mojarra 2.1.6)
PrimeFaces 4.0
JMeter 2.11 (To create the load)
VisualVM (To monitor memory consumption & take heap dump)
Eclipse Memory Analysis Tool (MAT) 1.3 – Used to analyse the heap.
我对堆分析的推断:当我在堆中看到10,000个会话实例时,我推断JMeter正在使用我的上述配置模拟10,000个用户,而不是模拟100个用户,每个用户都有100个URL访问。
问题:JMeter会预期这种循环计数行为还是我错过了什么?
答案 0 :(得分:3)