Jmeter JVM应该已经退出,但没有退出

Jmeter JVM应该已经退出,但没有退出,jmeter,Jmeter,在非gui模式下使用JMeter执行脚本和远程测试时,我会收到错误消息,如何解决该问题 summary = 0 in 00:00:00 = ******/s Avg: 0 Min: 9223372036854775807 Max: -9223372036854775808 Err: 0 (0.00%) Tidying up remote @ Sun Jan 07 21:00:11 EST 2018 (1515376811888) ... end of run The

在非gui模式下使用JMeter执行脚本和远程测试时,我会收到错误消息,如何解决该问题

summary =      0 in 00:00:00 = ******/s Avg:     0 Min: 9223372036854775807 Max:
 -9223372036854775808 Err:     0 (0.00%)
Tidying up remote @ Sun Jan 07 21:00:11 EST 2018 (1515376811888)
... end of run
The JVM should have exitted but did not.
The following non-daemon threads are still running (DestroyJavaVM is OK):
Thread[Thread-5,5,main], stackTrace:java.net.DualStackPlainSocketImpl#accept0
java.net.DualStackPlainSocketImpl#socketAccept at line:131
java.net.AbstractPlainSocketImpl#accept at line:409
java.net.PlainSocketImpl#accept at line:199
java.net.ServerSocket#implAccept at line:545
java.net.ServerSocket#accept at line:513
bsh.util.Sessiond#run at line:71
java.lang.Thread#run at line:748

Thread[DestroyJavaVM,5,main], stackTrace:
Thread[Thread-3,5,main], stackTrace:java.net.DualStackPlainSocketImpl#accept0
java.net.DualStackPlainSocketImpl#socketAccept at line:131
java.net.AbstractPlainSocketImpl#accept at line:409
java.net.PlainSocketImpl#accept at line:199
java.net.ServerSocket#implAccept at line:545
java.net.ServerSocket#accept at line:513
bsh.util.Httpd#run at line:70
java.lang.Thread#run at line:748

异常来自守护进程线程,如下所述:

JMeter将退出它启动的所有非守护进程线程,但可能仍会保留一些非守护进程线程;这将阻止JVM退出。为了检测这种情况,JMeter在退出之前启动一个新的守护进程线程。此守护进程线程等待一小段时间;如果它从等待中返回,那么JVM显然无法退出,线程会打印一条消息说明原因

从异常详细信息来看,您似乎有一些套接字连接。这些可以是HTTP采样器,其他一些打开套接字或自定义脚本的采样器。默认情况下,守护进程线程等待2秒,因此如果任何采样器上的超时时间更长,则可能是守护进程只需要等待更长的时间(或者您需要缩短超时时间)

因此:

  • 检查您的脚本并找出采样器的超时情况。将它们设置为小于2秒的数字,或将jmeter.properties中的以下设置更改为高于最大超时值:

    jmeter.exit.check.pause=...
    
    例如,如果采样器配置为等待30秒,则将此值设置为32秒

  • 若并没有帮助,那个么很可能是底层库中存在一些bug。在这种情况下,您无法真正解决它,但您可以使用相当残酷的解决方法:

    如果属性jmeterengine.stopfail.system.exit设置为true(默认值为false),那么JMeter将在无法停止所有线程时调用system.exit(1)。通常这是不必要的

    因此,将以下属性设置为
    true
    ,如下所述:

    正如help所说,通常情况下这是不必要的,但是如果线程真的被卡住了,那么就没有太多的选择了


  • 最有可能的情况是JMeter过载,即您试图在硬件规格较低的机器上启动太多线程,或者您没有正确调整JMeter以适应高负载,或者两者兼而有之

  • 确保你在跟踪
  • 确保您遵循负载测试运行一章中的建议
  • 设置对基本操作系统级运行状况指标(CPU、RAM、交换、磁盘和网络使用情况)的监控。现代操作系统通常附带一组实用程序,或者您可以使用,这样您就能够将主要性能指标与资源利用率关联起来。JMeter必须有足够的净空来运行,就好像JMeter无法足够快地发送请求一样,您将无法执行计划的负载

  • 似乎您有自定义代码或某个插件无法按照此根堆栈跟踪正确处理退出:

    bsh.util.Httpd#在第70行运行


    因此,请检查此脚本或报告错误。

    我现在也遇到了同样的问题(我使用的是jmeter的4.0版),解决方案是在
    jmeter.properties上禁用beanshell服务器


    只需在文件
    jmeter.properties
    中注释
    beanshell.server.port=9000
    ,我在一个分布式设置中遇到了这个错误,其中beanshell服务器在主节点和从节点上运行,所有节点都使用相同的jmeter.properties配置:


    从主节点jmeter.properties中删除这些行后,错误消失。

    您的jmeter版本是什么?我的jmeter版本是3.1 R1770033,这可能是一个错误。但您能否检查最新的3.3版本并共享您的测试计划或您正在使用的插件?请尝试jmeterengine.force.system.exit=true。这个问题是重复的。我在这里补充了我对重复问题的答案:添加这些行是导致甲烷储存出现问题的原因。我将暂停时间设置为11000毫秒,现在“并发线程组”的暂停时间正常。
    jmeterengine.stopfail.system.exit=true
    
    beanshell.server.port=9000
    beanshell.server.file=../extras/startup.bsh