JMeter5.4.3执行stoptest.sh后无法运行测试套件如何解决
故障现象
Linux环境运行JMeter 5.4.3版本,执行stoptest.sh脚本后无法启动任何测试套件,运行时抛出错误:
error Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 on linux
故障根因
- 4445端口被残留JMeter进程占用:
stoptest.sh的工作逻辑是向本地4445端口发送停机指令终止测试,若上次运行的JMeter进程因强杀、OOM崩溃、SSH断连挂起等原因异常退出,会留下僵尸进程持续占用4445端口。新启动的JMeter实例检测到端口被占用后不会直接抛出端口冲突错误,反而会进入等待该端口下发停机/堆转储/线程转储指令的状态,触发上述报错。 - 运行锁文件残留:JMeter异常退出时没有自动清理运行时生成的锁文件,导致新启动的实例误判已有JMeter实例正在运行,自动进入监听停机指令的状态。
- 固定端口冲突:若4445端口被系统其他常驻服务占用,JMeter启动时无法绑定该端口用于接收停机指令,也会触发该报错。
排查&解决步骤
- 清理残留JMeter进程
执行命令查询所有存活的JMeter相关进程:
拿到所有JMeter进程的PID后,执行强制kill命令清理:ps -ef | grep -i jmeter | grep -v grep
清理完成后确认4445端口已无进程占用:kill -9 <上一步查到的JMeter进程PID,多个PID用空格分隔>
如果查询结果仍有进程占用4445,直接杀掉对应PID即可。# 适用于安装了net-tools的发行版 netstat -tulnp | grep 4445 # 适用于默认带ss工具的新发行版 ss -tulnp | grep 4445 - 清理残留锁文件和临时文件
进入JMeter安装目录的bin文件夹,清理残留锁文件,同时删除/tmp目录下的JMeter临时文件:cd ${JMETER_HOME}/bin rm -f *.lck rm -rf /tmp/JMeter* - 调整监听端口(若4445端口被其他服务占用无法释放)
打开${JMETER_HOME}/bin/jmeter.properties配置文件,找到非GUI模式监听端口的配置项,修改为未被占用的端口段:
保存配置后重新启动JMeter即可正常运行测试。# 去掉行首注释符,将默认4445端口改为未被占用的端口,例如4455 jmeterengine.nongui.port=4455 # 配置端口自动搜索的上限,避免默认端口被占时自动选到冲突端口 jmeterengine.nongui.maxport=4465 - 后续使用注意事项
不要在无JMeter实例运行的状态下反复执行stoptest.sh;终止测试优先使用stoptest.sh的正常停机逻辑,或在JMeter运行控制台按Ctrl+C触发正常退出,尽量不要直接用kill -9强杀JMeter进程,减少进程和文件残留概率。
内容的提问来源于stack exchange,提问作者saanvi
相关产品推荐
相关产品推荐

