JMeter在CentOS上的故障排查步骤
小樊
34
2025-12-21 17:54:09
JMeter在CentOS上的故障排查步骤
一 环境与健康检查
- 确认 Java 可用且版本匹配:执行 java -version;JMeter 5.x 建议使用 JDK 8。若提示 “Could not create the Java Virtual Machine”,检查 JAVA_HOME/PATH 是否指向正确 JDK,并适当调整 HEAP 内存参数(如在 jmeter 启动脚本中设置 -Xms/-Xmx)。
- 检查 JMeter 安装与权限:执行 jmeter -v;若报 permission denied,对 JMeter 目录执行 chmod -R 755 <jmeter根目录>。
- 基线验证:在 非 GUI 模式跑通最小化脚本,确认环境可用:
jmeter -n -t test.jmx -l test.jtl
以上步骤可快速排除环境、权限与脚本层面的基础问题。
二 常见报错与快速修复
- 权限问题:运行或写入文件报 permission denied → 对 JMeter 目录执行 chmod -R 755。
- 分布式 RMI 连接被拒或超时:
- 出现 java.io.FileNotFoundException: rmi_keystore.jks → 在 jmeter.properties 将 server.rmi.ssl.disable=true(测试环境常用)。
- 出现 Error in rconfigure() method java.rmi.ConnectException: Connection refused / timeout → 多网卡/回环地址导致,启动执行机时显式指定本机 IP:
./jmeter-server -Djava.rmi.server.hostname=<执行机IP>
同时在控制机的 jmeter.properties 设置 remote_hosts=<执行机IP>:<端口>。
- 端口未放行或被占用:在 jmeter.properties 自定义端口并放行防火墙,例如:
server_port=1567
server.rmi.localport=1567
使用 firewall-cmd 放行端口或临时关闭防火墙验证:
firewall-cmd --state
systemctl stop firewalld
用 telnet <端口> 验证连通性。
- 主机名解析不一致:控制机收不到执行机信息 → 检查 /etc/hosts 中 hostname 与 IP 映射一致。
- 资源限制导致异常:
- 报 too many open files → 在 /etc/security/limits.conf 提升 nofile/nproc,如:
- soft/hard nofile 65535
- soft/hard nproc 65535
重启 sshd 或重登生效。
- 出现 java.net.NoRouteToHostException / Cannot assign requested address → 调整内核网络参数:
/proc/sys/net/ipv4/tcp_fin_timeout(如 15–30)
/proc/sys/net/ipv4/tcp_tw_reuse=1
/proc/sys/net/ipv4/tcp_tw_recycle=1(按需)
/etc/sysctl.conf 增加:net.ipv4.ip_local_port_range=1024 65535;执行 sysctl -p。
- 监控插件端口冲突:使用 ServerAgent 报 Address already in use → 查杀占用进程或更换端口:
lsof -i:4444
kill -9
或启动:./startAgent.sh --udp-port 0 --tcp-port 4567。
三 日志与结果分析定位
- 开启详细结果以便排查:在 bin/user.properties 增加(或确保已设置):
jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.responseHeaders=true
非 GUI 执行后,将 .jtl 导入 GUI 的“查看结果树”即可看到请求/响应详情。
- 实时查看日志:
tail -f jmeter.log(JMeter 运行日志)
tail -f <result.jtl>(结果日志)
便于快速定位断言失败、连接异常、DNS 解析失败等。
- 服务端问题联动排查:若接口返回异常,结合服务端应用日志与网络抓包,区分是 参数/逻辑 问题还是 网络/容量 瓶颈。
四 分布式与网络连通性专项
- 端口与连通性:
- 执行机:在 jmeter.properties 设置 server_port 与 server.rmi.localport 为同一端口(如 1567),并在防火墙放行。
- 控制机:在 remote_hosts 填写 IP:端口;用 telnet 验证到执行机的 1099(RMI Registry)与 server_port 连通性。
- 多网卡/回环地址:
- 执行机启动:./jmeter-server -Djava.rmi.server.hostname=<执行机IP>
- 控制机(Windows)在 jmeter.bat 中新增 RMI_HOST_DEF 指向本机 IP,确保回调地址可达。
- 主机名一致性:/etc/hosts 中 hostname ↔ IP 必须一致,避免控制机/执行机互相解析错误。
- 安全策略:测试环境可临时关闭 firewalld 验证是否为策略阻断;生产环境请按需放行端口或使用更细粒度的安全组/ACL。
五 性能与稳定性优化
- 系统资源与网络:
- 提升文件句柄与进程数(见“资源限制”)。
- 调整 TIME_WAIT 复用与端口范围(见“常见报错”)。
- 适度优化 TCP 参数(如 tcp_fin_timeout、tcp_tw_reuse、tcp_max_tw_buckets)与本地端口范围,缓解高并发下的端口耗尽与连接建立失败。
- JMeter 侧优化:
- 非 GUI 模式执行,减少监听器开销;禁用或移除 View Results Tree 等重监听器。
- 使用 CSV 输出并合理设置 jmeter.save.saveservice.*,避免生成过大 XML 导致 OOM 或报告失败。
- 合理设置 HEAP 与 GC 参数,避免频繁 GC 或堆溢出;必要时使用 分布式 扩展压力。
- 脚本层面使用 定时器 模拟真实用户节奏,避免突发流量失真。
- 监控与诊断:压测期间用 top/vmstat/iostat 观察资源,必要时对目标服务做 jstat/jmap 堆分析,定位内存与对象生命周期问题。