0

在单个 docker 容器上运行 apache-jmeter 测试时,我面临以下问题。

[489.013s][warning][os,thread] 无法启动线程 - 属性的 pthread_create 失败(EAGAIN):stacksize:1024k,guardsize:0k,已分离。未捕获的异常 java.lang.OutOfMemoryError:无法创建本机线程:可能内存不足或达到进程/资源限制。有关详细信息,请参阅日志文件。

我无法生成超过 2k 并发的负载。即使在同一 docker 主机上的分布式模式下,我也很容易实现 5k 用户并发。似乎单个 docker 容器没有充分利用可用的 CPU 和内存。

以下是配置:

  • 服务器内存 - 90GB
  • CPU 数量 - 16
  • 容器的上限 (ulimit -n) - 1048576
  • Java - 打开 jdk-14
  • JVM 参数 - -Xms80G -XMX80G
4

1 回答 1

0

无法创建本机线程

这意味着您不能在操作系统级别上创建超过 2000 个线程,检查产生的内容ulimit -uulimit -T命令以及是否在 2000 左右看到一些东西 - 这是您需要责备的设置。

此外,对于 2000/5000 个虚拟用户,您的堆分配对我来说似乎很高,您不需要将所有物理 RAM 分配给 JVM,您需要调整 JVM。

如果 Java 堆的占用率过高,垃圾回收会频繁发生。如果占用率低,则垃圾回收不频繁但持续时间更长……尽量将 Java 堆的内存占用率保持在 Java 堆大小的 40% 到 70% 之间……

更多信息:

于 2020-08-03T15:28:44.103 回答