【发布时间】:2014-01-22 07:41:21
【问题描述】:
这与 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 个浏览器窗口,每个用户访问 URL 100 次,每个with the same browser window。因此,理想情况下,这应该只创建 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 个 URL 访问的 100 个用户。
问题:JMeter 的这种循环计数行为是预期的还是我遗漏了什么?
【问题讨论】:
标签: performance jmeter performance-testing