【问题标题】:Jmeter testing with 10k+ threads使用 10k+ 线程进行 Jmeter 测试
【发布时间】: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


【解决方案1】:

确保您使用的是 64 位 jre 环境,该错误应该会消失。

【讨论】:

  • 想办法给你的用户线程一个更大的堆大小,然后可以创建更多的守护线程,否则我真的不知道问题是什么,对不起。
【解决方案2】:
  1. 确保真正应用了您的 JVM 堆调整参数。放置它们的最佳位置是找到以下行

    • 对于 Windows:在 jmeter.bat 文件中

      set HEAP=-Xms512m -Xmx512m
      
    • 对于 Linux/Unix/MacOSX:在 jmeter 文件中

      HEAP="-Xms512m -Xmx512m"
      

    并根据您的需要进行修改

  2. 确保您在command-line non-GUI mode 中运行测试
  3. 确保您已禁用所有 Listeners

请参阅JMeter Performance and Tuning Tips 以了解上述说明和更多建议。

实际上,JMeter 可以启动的线程数很大程度上取决于您的测试正在做什么,如果它是非常“简单”的东西 - 仅使用一台具有 8Gb RAM 的机器可能就足够了,但是如果您的测试假设大量后处理,发送,接收和解析大量数据,如果您耗尽一台机器资源并且无法达到所需的负载 - 考虑Remote Testing 当一个 JMeter 节点编排执行相同测试场景的多个从站时 - 它允许产生几乎无限的负载。

【讨论】:

  • 请注意这个问题是明确关于 OS X 的。我认为 jmeter.bat 没有任何帮助。
  • 很好,我将更新答案以包括 *nix 系统指令。
猜你喜欢
  • 2020-06-15
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多