我正在使用Jmeter 5.0运行一些性能测试。
用我的参数解析一个csv文件并发送一个简单的post请求,没什么特别的。
我的线程组并发配置的100个线程具有100 RPS(不是很多)。
堆大小设置为最大15GB和最小1GB。
我的机器的物理RAM内存是32GB。
我试图将堆大小提高到20GB甚至25GB,但是由于内存不足,它仍然崩溃了。
我分析了gc日志,发现对于第一个15GB最大堆大小配置和第二大大部分堆大小(大约95%),老一代都在使用,GC莫名其妙地无法清理它们。
我没有使用GUI模式,也没有使用监听器。
第一个15GB配置在1小时20分钟后崩溃,第二个持续了2个多小时。
这是20GB的GCeasy日志分析:
20GB heap size
最佳答案
很难看到任何有意义的东西:
完整的堆栈跟踪(因为OutOfMemory可能有很多面)
HProf file的内容
测试计划的结构
通常,OutOfMemory错误指示memory leak,因此请确保遵循9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure文章中的建议。
“盲注”。仅当您的应用程序响应时间为1秒或更短时,您才能为100个虚拟用户提供100 RPS。
如果应用程序响应时间大于1秒,并且您正在使用Precise Throughput Timer或Throughput Shaping Timer来强制JMeter达到100 TPS,则可能是由于过载导致应用程序无法快速响应,而JMeter增加了更多线程尝试达到100 RPS,直到资源用尽。
关于java - Jmeter即使在分配高堆大小的情况下也可以测试内存不足错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60600782/