未捕获异常java.lang.OutOfMemoryError:在单个docker容器内执行jmeter时,无法创建本机



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

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

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

以下是配置:

  • 服务器的RAM-90GB
  • CPU数量-16
  • 容器的上限(Ulimit-n(-1048576
  • Java-打开jdk-14
  • JVM参数--Xms80G-XMX80G

无法创建本机线程

这意味着您不能在操作系统级别上创建超过2000个线程,请检查ulimit -uulimit -T命令生成的内容,如果您在那里看到大约2000个线程-这是您需要责怪的设置。

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

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

更多信息:

  • 内存不足疑难解答错误:无法创建新的本机线程
  • JMeter负载测试"内存不足"故障的9种简单解决方案
  • IBM WebSphere Application Server性能食谱-最佳堆大小
  • Docker-带有内存、CPU和GPU的运行时选项

最新更新