JMeter使用Throughput Controller遇单线程Bearer Token EOF报错及进程无法停止问题
问题1:单线程运行出现Bearer Token throws EOF报错 修复方案
- 直接换掉你现在用的BeanShell脚本,改用JSR223处理器+Groovy语言处理Token逻辑,BeanShell是JMeter早就不推荐的老旧组件,IO处理很容易出资源泄漏的问题。
- 没必要把Token写到公共文件里跨步骤传,直接用JMeter自带的线程私有变量存就行:登录接口加个JSR223后置处理器,写一行
vars.put("bearerToken", "你从接口拿到的Token值"),后面Action接口的Header里直接用${bearerToken}拿,完全不会有文件读写冲突的问题。EOF报错基本都是你读文件的时候拿到的Token不完整或者是空的,请求发出去服务器不认直接断连导致的。 - 要是必须把Token存到本地,每个线程单独生成带线程号后缀的文件,读写完立刻关IO流,别留资源占着。
问题2:测试超10分钟不停止、手动终止无效 修复方案
- 先看Throughput Controller的配置:要是你选的是
Total Executions模式还没勾Per Thread,总执行次数设太高的话,哪怕线程组时长到了,控制器还会一直发请求,测试肯定停不下来。要么切成Percent Executions模式按比例控吞吐量,要么勾上Per Thread按单个线程限制执行次数。 - 再检查Stepping Thread Group的配置,确认开了
Stop thread if duration limit is reached,没开的话到了时长线程也会跑完当前所有循环才停,你要是循环没设终止就会一直跑。 - 所有文件读写、数据库连接的操作一定要加资源释放的逻辑,BeanShell脚本IO卡住是JMeter进程收不到停止信号的最常见原因,全换成JSR223 Groovy脚本之后基本能解决九成以上的假死问题。
- 跑压测别用GUI模式,切非GUI模式跑,把没用的结果树、监听器都关了,GUI本身负载就高,监听器存太多数据也容易导致进程卡死活停不下来。
内容的提问来源于stack exchange,提问作者Chinni
相关产品推荐
相关产品推荐

