【问题标题】:Unable to solve "Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread" when testing with multiple threads in JMeter在 JMeter 中使用多个线程进行测试时,无法解决“未捕获的异常 java.lang.OutOfMemoryError:无法创建新的本机线程”
【发布时间】:2017-05-10 12:45:00
【问题描述】:

我正在使用 JMeter 对 MQTT 连接进行负载测试。

测试在非 GUI 模式下运行。 在测试期间,所有听众都被禁用。

一切都很好,直到我将线程数从 2k 增加到 3k。现在,当我运行测试时出现此错误:

Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread. See log file for details.

我尝试通过编辑可执行文件“jmeter”来增加 HEAP 大小

这是我编辑它的方式。我将它从 512m 更改为 1024m:

但它不起作用。然后我改成更大的值2048m,还是不行。

我搜索了这个问题,发现它可能与线程堆栈大小有关。有人指出我也可以在脚本中设置线程堆栈大小。所以我尝试在可执行文件中添加线程堆栈大小。

我是这样做的:

我不确定这是否是正确的方法。也没有用。

也有人说也许应该增加JVM的HEAP大小或线程堆栈大小。

然后我遇到了MKYoung的这个教程:https://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/ 说明改变java的HEAP大小和线程堆栈大小的方法。

但为了让设置生效,我必须在命令末尾声明一个 java 类文件。

java -Xss256k <class name here>

但是 Jmeter 是 unix 可执行文件,那里似乎没有任何 java 类文件。

我真的没办法了。请帮忙。

【问题讨论】:

  • "查看日志文件了解详情。"日志说什么?
  • @bradimus 嗨,我在日志中看不到任何有用的信息。没有错误。但仅供参考,我正在查看日志文件 jmeter.log。我不确定这是否是这里所说的日志文件。
  • @finalstatic 您能否提及操作系统的位(32 或 64)以及已安装的 JVM?当您说将堆设置为 2048m 不起作用时,您是指问题还是将 2048m 分配给 JMeter 不起作用?另外,您是否尝试过以分布式模式运行测试?

标签: java multithreading jvm jmeter jvm-arguments


【解决方案1】:

执行ulimit -u 命令(显示最大用户进程)并根据您尝试使用的线程数修改它(以及更多以便其他进程可以操作),查看@ 987654322@线程了解详情。

除此之外,请确保您遵循 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure 指南的建议。

【讨论】:

  • 你好,Mac下如何设置ulimit -u。直接设置是不行的。它输出:-bash: ulimit: max user processes: cannot modify limit: Operation not allowed。我也无法在 /etc/security 下看到任何 limits.conf。我阅读了您提供的链接,但仍然没有帮助。
  • 对于 Mac,它将是 sudo launchctl limit maxproc/etc/sysctl.confcorrespondingly
  • 抱歉提供了一个过时的指令,尝试创建/etc/launchd.conf文件并在那里添加limit maxproc XXXX YYYY这样的行 - 这样设置将在重新启动后继续存在。
  • 您好,XXXX 和 YYYY 是什么?
  • 软硬限制
猜你喜欢
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多