即使对于高堆大小分配,Jmeter 也会测试内存不足错误

Jmeter tests out of memory error even for high heap size allocation

我正在 运行 使用 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

没有亲眼所见很难说出有意义的话:

  1. 完整的堆栈跟踪(因为OutOfMemory可能有很多面孔)
  2. 你的内容 HProf file
  3. 测试计划的结构

一般情况下,OutOfMemory 错误表示 memory leak, so make sure to follow recommendations from the 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure 文章。


一个"blind shot"。仅当您的应用程序响应时间为 1 秒或更短时,您才能拥有 100 个 RPS 和 100 个虚拟用户。

如果应用程序响应时间变得 > 1 秒并且您正在使用 Precise Throughput Timer or Throughput Shaping Timer 以强制 JMeter 达到 100 TPS,则可能是应用程序由于过载而无法更快地响应,而 JMeter添加越来越多的线程试图达到 100 RPS,直到它耗尽资源。