温馨提示×

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.propertiesserver.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/hostshostname 与 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
  • 监控插件端口冲突:使用 ServerAgentAddress 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_portserver.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/hostshostname ↔ 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 或报告失败。
    • 合理设置 HEAPGC 参数,避免频繁 GC 或堆溢出;必要时使用 分布式 扩展压力。
    • 脚本层面使用 定时器 模拟真实用户节奏,避免突发流量失真。
  • 监控与诊断:压测期间用 top/vmstat/iostat 观察资源,必要时对目标服务做 jstat/jmap 堆分析,定位内存与对象生命周期问题。

0