Jmeter执行java脚本结束时提示:The JVM should have exited but did not.

使用jmeter对dubbo进行压测时,需要使用jmeter的sampler里的java请求

 

使用./jmeter.sh -n -t test.jmx -l test.jmx -o -e test后台启动任务,执行结束出现“The JVM should have exited but did not.”现象,jmeter后台任务自动停止失败

解决办法:在jmeter.properties里或user.properties里设置   

jmeterengine.force.system.exit=true

 

 

在apache-tomcat托管的应用里如果使用了dubbo的消费端,关闭tomcat时,会无法退出进程,应用会被关闭,connector端口也关闭了,但dubbo相关的一些线程仍存在,导致java进程并不会消失。这其实是由非daemon线程引起的,jvm里当前main线程在退出时,只要存在非daemon的子线程,就不会退出jvm,哪怕这个非daemon的线程是在一个daemon线程里启动的  

Dubbo的线程都是daemon的,不过它使用的netty框架却有一个非daemon的“Hashed wheel timer”线程:正是这个非daemon线程,导致tomcat的主线程退出后,jvm进程没能退出。类似的问题以前在HSF2里也存在,后来已经解决了。dubbo的这个问题可以通过kill来结束。

你的应用里存在非 daemon 线程,应用关闭时没法关闭掉这些线程,会报“memory leak”

posted @ 2018-01-29 11:11  脚本小娃子  阅读(758)  评论(0编辑  收藏  举报