jmeter在centos上的故障排查
JMeter 在 CentOS 上的故障排查手册
一 快速定位路径
- 查看 JMeter 自身日志:在 JMETER_HOME/bin/jmeter.log 中定位插件加载、配置解析、启动失败等线索。
- 非 GUI 运行并输出日志:使用命令 jmeter -n -t test.jmx -l test.jtl;如需在报告中查看请求/响应,先在 bin/user.properties 开启保存项(见下文“结果不准确/无响应数据”)。
- 远程执行与端口:分布式压测时使用 -r;确认 jmeter.properties 中 remote_hosts 已正确填写执行机地址;必要时调整 server_port 与 server.rmi.localport 并放通防火墙。
- 环境校验:执行 jmeter -v、java -version 确认版本匹配;JMeter 5.4.3 要求 Java 8+。
二 常见故障与修复
-
启动报错:Cannot start. Unable to get local host IP address(本地回环地址)
原因多为 /etc/hosts 将本机名映射到了 127.0.0.1。修复:在 /etc/hosts 为本机名添加可路由的 IP 映射(如 10.x.x.x 主机名),确保解析到非回环地址。 -
权限拒绝 Permission denied
执行机目录权限不足。修复:对 JMeter 安装目录执行 chmod -R 755 apache-jmeter-。 -
分布式连接被拒或超时 Connection refused / timeout
常见原因:防火墙未放行、RMI 主机名解析错误、端口不一致。排查步骤:- 放通端口(示例): firewall-cmd --state 查看;systemctl stop firewalld 临时关闭或配置放行策略;
- 在 jmeter-server 启动前设置本机 IP:导出变量 RMI_HOST_DEF=-Djava.rmi.server.hostname=< 本机IP> ;
- 在 jmeter.properties 统一设置 server.rmi.ssl.disable=true(测试环境),并确认 server_port 与 server.rmi.localport 一致且未被占用;
- 若本机存在多网卡,确保 RMI 绑定到业务网卡的 IP。
-
文件缺失 rmi_keystore.jks
分布式 SSL 未配置导致。修复:在 jmeter.properties 将 server.rmi.ssl.disable 设为 true,或放置正确的密钥库文件。 -
结果不准确或无响应数据
常见原因:参数化/外部文件未同步、TCP 取样器类名不匹配、监听器过重。修复:- 将参数文件同步到所有 slave 且内容一致;
- TCP 取样器按数据格式设置 TCPClient classname(文本:org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl;二进制:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl;十六进制需设置结束符);
- 非 GUI 场景禁用 View Results Tree 等重监听器,并在 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
-
生成 HTML 报告报错 Mismatch between expected number of columns
强制结束压测导致 jtl 尾部记录不完整。修复:删除 jtl 最后一行不完整记录后,再执行 jmeter -g test.jtl -e -o < report_dir> 生成报告。 -
ServerAgent 端口冲突 Address already in use
默认 4444 端口被占用。修复:- 查找并结束占用进程:lsof -i:4444 → kill -9 ;
- 或修改 ServerAgent 的启动端口后重启。
三 性能与稳定性调优
-
JVM 内存
编辑 bin/jmeter 或 bin/jmeter.sh,为压测机设置合适的堆(不超过物理内存的约 2/3)。示例:在 jmeter.sh 中设置 JVM_ARGS=“-Xms2g -Xmx8g”,或在 jmeter 脚本中调整 HEAP 参数。 -
文件句柄与进程数
临时:ulimit -n 102400;永久:在 /etc/security/limits.conf 增加-
- soft/hard nofile 65536
-
- soft/hard nproc 65565
-
-
端口与 TCP 参数
扩大本地端口范围并优化回收:在 /etc/sysctl.conf 增加- net.ipv4.ip_local_port_range = 1024 65000
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
执行 sysctl -p 生效。
-
HTTP 客户端空闲超时
在 jmeter.properties 设置 httpclient4.idletimeout=10000(毫秒),减少连接闲置导致的异常。 -
监听器与脚本策略
非 GUI 场景禁用 View Results Tree;使用 CSV 输出并减少保存字段;用 Groovy 替代 Beanshell;通过 定时器 控制节奏,避免突发洪峰。
四 分布式压测快速检查清单
- 版本一致:控制机与执行机的 JMeter 版本 与 **JDK 版本(≥1.8)**保持一致。
- 网络连通:控制机可 ping 通执行机;必要时关闭防火墙或放行 RMI/ServerAgent 端口。
- 主机名解析:执行机 hostname 与 /etc/hosts 映射一致,且 RMI 绑定到正确的 非回环 IP。
- 关键配置:
- jmeter.properties:remote_hosts 正确、server.rmi.ssl.disable=true(测试环境)、端口一致;
- 启动执行机前导出 RMI_HOST_DEF=-Djava.rmi.server.hostname=< 本机IP> ;
- 参数化/数据文件在 所有 slave 上一致。
- 资源监控:使用 PerfMon 插件监控 CPU/内存/IO,便于定位瓶颈。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: jmeter在centos上的故障排查
本文地址: https://pptw.com/jishu/763500.html
