Multithreading 使用10k和x2B进行Jmeter测试;线程

Multithreading 使用10k和x2B进行Jmeter测试;线程,multithreading,jmeter,performance-testing,Multithreading,Jmeter,Performance Testing,我需要用10000多个线程运行一个线程测试,但在大约2000个线程时,我得到了错误: Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread. 我的机器有8GB内存。我试过了 set JVM_ARGS="-Xms1024m -Xmx6144m" jmeter.sh 不过,我没有更改jmeter.sh文件中的任何内容。我需要改变什么吗?我还能做些什么来运行这么大的测试?如何在没有JMet

我需要用10000多个线程运行一个线程测试,但在大约2000个线程时,我得到了错误:

Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread.
我的机器有8GB内存。我试过了

set JVM_ARGS="-Xms1024m -Xmx6144m" jmeter.sh

不过,我没有更改jmeter.sh文件中的任何内容。我需要改变什么吗?我还能做些什么来运行这么大的测试?如何在没有JMeterGUI的情况下运行jmx文件?(使用mac osx)

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

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

  • 确保确实应用了JVM堆优化参数。放置它们的最佳位置是定位以下行

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

    • 对于Linux/Unix/MacOSX:在jmeter文件中

    并根据您的需要进行修改

  • 确保您正在运行测试
  • 确保你有所有的残疾人
  • 有关上述内容的解释和其他建议,请参见

    实际上,JMeter的线程数在很大程度上取决于您的测试所做的工作,如果它是非常“线性”的,那么只使用一台具有8Gb RAM的机器就足够了,但是如果您的测试假设大量的后处理、发送、接收和解析大量数据,如果你耗尽了一个机器资源,并不能达到期望的负载——考虑当一个JMIT节点编排一些执行相同测试场景的奴隶时,它允许产生几乎无限的负载。p>
  • 确保确实应用了JVM堆优化参数。放置它们的最佳位置是定位以下行

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

    • 对于Linux/Unix/MacOSX:在jmeter文件中

    并根据您的需要进行修改

  • 确保您正在运行测试
  • 确保你有所有的残疾人
  • 有关上述内容的解释和其他建议,请参见


    实际上,JMeter的线程数在很大程度上取决于您的测试所做的工作,如果它是非常“线性”的,那么只使用一台具有8Gb RAM的机器就足够了,但是如果您的测试假设大量的后处理、发送、接收和解析大量数据,如果你耗尽了一个机器资源,并不能达到期望的负载——考虑当一个JMIT节点编排一些执行相同测试场景的奴隶时,它允许产生几乎无限的负载。p> 想办法给你的用户线程一个更大的堆大小,然后可以创建更多的守护进程线程,否则我真的不知道问题是什么,对不起。想办法给你的用户线程一个更大的堆大小,然后可以创建更多的守护进程线程,否则我真的不知道问题是什么,很抱歉。请注意,这个问题是关于OS X的。我认为jmeter.bat没有任何帮助。很好,我将更新答案,以包括*nix系统指令。请注意,这个问题是关于OS X的。我不认为jmeter.bat有任何帮助。很好,我将更新答案,使其包含*nix系统指令。尝试在没有GUIHeap的情况下从控制台运行jmeter不会有帮助;线程所需的几乎所有空间都用于堆栈,而这些空间不是来自堆,甚至不是来自可配置/可测量的非堆池,而是来自“本机”内存。它在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个线程,或者任何可以运行的进程?AIUIJMeter具有很强的并行性,也就是说,每个线程独立于其他线程执行自己的工作,因此它们实际上不需要处于同一进程中。您可能需要设置多个工作目录和配置文件等,而不仅仅是一个,但我认为这应该不会太困难。祝你好运。试着在没有GUIHeap的情况下从控制台运行jmeter不会有帮助;线程所需的几乎所有空间都用于堆栈,而这些空间不是来自堆,甚至不是来自可配置/可测量的非堆池,而是来自“本机”内存。它在JVM版本和变体之间变化,没有通知或文档。在程序不出现故障的情况下,尽可能低地拖动
    -Xss
    ,确保
    ulimit
    或类似的操作不会影响您的进程,然后交叉手指。@dave_thompson_085我对jmeter有点陌生,您能否进一步解释一下如何将-Xss设置为低(是否在jmeter.sh文件中)我如何确保ulimit不会影响我的进程呢?
    -Xss
    是Java/JVM启动选项;您将其设置为与-Xmx等相同的方式。我不熟悉jmeter,但@Dmitri的答案对我来说似乎是合理的。困难的部分是确定要使用的正确值,因为它取决于线程运行的代码;我在那里帮不了什么忙
    set HEAP=-Xms512m -Xmx512m
    
    HEAP="-Xms512m -Xmx512m"