我正在使用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错误表示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,直到资源用尽。