温馨提示×

如何解决CentOS上JMeter连接问题

小樊
41
2025-12-31 11:37:39
栏目: 智能运维

CentOS 上 JMeter 连接问题排查与修复

一 快速定位连接异常

  • 明确异常类型:是 JMeter 作为客户端连不到被测服务,还是分布式中 Master 与 Slave 之间连不通,抑或 JMeter 插件(如监控)连不到目标端口。
  • 连通性验证:对被测主机执行 telnet 目标IP 端口nc -vz 目标IP 端口;对分布式端口执行 telnet SlaveIP 1099(默认 RMI 端口)。无法连通时优先排查网络与安全策略。
  • 服务与端口监听:在被测端确认服务已启动并监听正确端口(如 ss -lntp | grep 端口netstat -lnp | grep 端口)。
  • 防火墙与安全组:在 CentOS 7 使用 firewall-cmd --state 查看防火墙状态,必要时放通端口(见下文命令)。
  • 代理与 DNS:若脚本或环境使用代理,确认 HTTP 请求 的代理配置正确;域名访问失败时用 dig/nslookup 检查解析。
  • 版本与权限:确认 Java 版本与 JMeter 兼容(常见为 JDK 1.8),JMeter 目录权限正确(如 chmod -R 755)。

二 常见场景与对应修复

  • 分布式压测 Master 与 Slave 连不通
    • 端口与防火墙:在 Slavejmeter.properties 中设置 server_port=1567server.rmi.localport=1567;在 Masterremote_hosts=SlaveIP:1567;用 firewall-cmd 放通 10991567/tcp
    • 主机名与 RMI 绑定:Slave 启动前导出 RMI_HOST_DEF=-Djava.rmi.server.hostname=SlaveIP;确保 /etc/hosts 中主机名与 IP 一致,避免回环或错绑。
    • SSL 证书缺失:若报 rmi_keystore.jks 不存在,在 jmeter.propertiesserver.rmi.ssl.disable=true(测试环境可用)。
    • 连接被拒或超时:优先用 telnet 验证端口可达,再检查 双网卡/虚拟网卡 导致的绑定错误。
  • 高并发时出现 “Cannot assign requested address / NoRouteToHostException”
    • 端口耗尽:检查 /proc/sys/net/ipv4/ip_local_port_range,必要时扩大可用端口区间(如 1024 65535)。
    • 加速端口回收:调低 tcp_fin_timeout=30,开启 tcp_tw_reuse=1;如内核支持再启用 tcp_tw_recycle=1;执行 sysctl -p 使配置生效。
  • HTTP 请求卡住或报 “Non HTTP response message: 无法指定被请求的地址”
    • 设置超时:在 HTTP Request Defaults → Advanced 中配置 Connect TimeoutResponse Timeout(如 10000 ms),避免无限等待。
  • JMeter 插件连不到目标端口(如监控插件)
    • 端口占用或防火墙:用 ss -antnetstat -lnp 检查端口占用;若端口被占用则更换端口;若防火墙拦截则放通对应 TCP/UDP 端口。

三 可直接复制的排查与修复命令清单

# 1) 查看与放通防火墙(CentOS 7)
sudo firewall-cmd --state
sudo firewall-cmd --permanent --add-port=1099/tcp
sudo firewall-cmd --permanent --add-port=1567/tcp
sudo firewall-cmd --reload

# 2) 验证端口连通性
telnet $TARGET_IP $TARGET_PORT
nc -vz $TARGET_IP $TARGET_PORT

# 3) 检查服务是否在监听
ss -lntp | grep $TARGET_PORT
# 或
netstat -lnp | grep $TARGET_PORT

# 4) 高并发端口耗尽与回收优化
cat /proc/sys/net/ipv4/ip_local_port_range
echo 30 | sudo tee /proc/sys/net/ipv4/tcp_fin_timeout
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_tw_reuse
# 如内核支持再执行(部分新内核已移除该开关)
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_tw_recycle 2>/dev/null || true
sudo sysctl -p

# 5) JMeter 分布式常用配置
# Slave 的 apache-jmeter/bin/jmeter.properties
server_port=1567
server.rmi.localport=1567
# 启动前在 Slave 上导出
export RMI_HOST_DEF=-Djava.rmi.server.hostname=$SLAVE_IP
./jmeter-server

# Master 的 apache-jmeter/bin/jmeter.properties
remote_hosts=$SLAVE_IP:1567

上述命令覆盖了端口连通性、服务监听、防火墙放行、分布式端口与主机绑定、以及高并发端口回收等关键步骤。

四 配置与网络最佳实践

  • 固定并显式配置 server_portserver.rmi.localport,避免随机端口带来的排障困难。
  • /etc/hosts 明确主机名与 IP 的映射,避免 hostname 解析异常或绑定到 127.0.0.1
  • 分布式环境优先使用 内网 IP,避免 NAT/双网卡 导致的回环或错路由。
  • 测试环境可临时关闭 SSL 以排除证书问题,生产或正式环境应正确配置证书与密钥。
  • HTTP 请求务必设置 Connect/Response Timeout,防止线程长时间挂起。
  • 高并发压测前预先评估并优化 端口范围TIME_WAIT 回收参数,必要时与网络/运维协同调整。

0