【发布时间】:2015-08-05 00:15:52
【问题描述】:
我需要运行超过 10000 个线程的线程测试,但在大约 2000 个时出现错误:
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread.
我的机器有 8GB 内存。我试过了
set JVM_ARGS="-Xms1024m -Xmx6144m" jmeter.sh
虽然我没有更改 jmeter.sh 文件中的任何内容。我需要改变什么吗?我还能做些什么来运行这么大的测试?如何在没有 jmeter gui 的情况下运行 jmx 文件? (使用 mac osx)
【问题讨论】:
-
尝试在没有 GUI 的情况下从控制台运行 jmeter
-
堆无济于事; 线程所需的几乎所有空间都用于其堆栈,而这并非来自堆,甚至不是来自可配置/可测量的非堆池,而是“本机”内存。并且 IME 它因 JVM 版本和变体而异,无需通知或文档。将
-Xss调低到你的程序不会失败的最低点,确保ulimit或类似的东西不会影响你的流程,并交叉手指。 -
@dave_thompson_085 我对 jmeter 有点陌生,您能否进一步解释一下如何将 -Xss 设置为低(在 jmeter.sh 文件中)以及如何确保 ulimit不会影响我的流程吗?
-
-Xss是 Java/JVM 启动选项;您将其设置为与 -Xmx 等相同的方式。我对 jmeter 不熟悉,但@Dmitri 的回答对我来说似乎很明智。困难的部分是确定要使用的正确值,因为它取决于您的线程运行的代码;我在那里帮不上什么忙。像ulimit这样的操作系统限制取决于您没有识别的操作系统,而且我也不知道所有这些限制;如果对特定系统有疑问,我通常会将诸如 Java 之类的复杂事物与仅分配大量内存的琐碎 C 程序进行比较,然后看看我得到了什么成功或错误。 ... -
... 进一步考虑,与其与 JVM 和可能的操作系统问题作斗争,不如只运行 多个进程,例如 5 个进程,每个进程有 2000 个线程,或者 10 个处理每个 1000,或者任何工作? AIUI jmeter 是非常强并行的,也就是说,每个线程独立于其他线程做自己的工作,所以它们并不需要在同一个进程中。您可能需要设置几个工作目录和配置文件等等,而不仅仅是一个,但我希望这不会太难。祝你好运。
标签: multithreading jmeter performance-testing