如何快速解决CentOS上JMeter连接问题,有效提升测试效率?
- 内容介绍
- 文章标签
- 相关推荐
一、常见痛点快速概览
使用者最头疼的几大问题:
- JMeter 连接超时导致脚本频繁失败。
-
RMI 通信报错
rmi_keystore.jks 不存在SSL 被强制开启。 - 防火墙或安全组未放通 1099 / 1567 等 RMI 端口出现 “Connection refused”。
- 高并发下出现 Cannot assign requested address / NoRouteToHostException往往是端口耗尽或网络绑定错误。
- Java 版本不匹配导致 “JDK version not supported”。
- 分布式压测 Master 与 Slave 无法互相通信。话说回来,
二、环境准备与快速安装 JMeter
1️⃣ 安装常用软件
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.6.x86_64.rpm
wget https://dl.grafana.com/oss/release/grafana-6.2.5-1.x86_64.rpm
sudo rpm -ivh influxdb-1.7.6.x86_64.rpm
sudo rpm -ivh grafana-6.2.5-1.x86_64.rpm
2️⃣ 下载并解压 JMeter
wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz
tar -xzf apache-jmeter-5.4.1.tgz
cd apache-jmeter-5.4.1
3️⃣ 安装 Java
sudo yum install -y java-1.8.0-openjdk-devel
java -version # 确认输出为 1.8.x
三、快速定位连接异常的排查思路
① 明确异常类型:客户端 → 被测服务 或 Master ↔ Slave
使用 telnet 或 验证端口是否可达。
② 检查防火墙/安全组设置
# 永久放通 RMI 默认端口 1099
sudo firewall-cmd --zone=public --add-port=1099/tcp --permanent
# 分布式压测常用的自定义端口,例如 1567
sudo firewall-cmd --zone=public --add-port=1567/tcp --permanent
sudo firewall-cmd --reload
# 临时测试可直接关闭防火墙
# systemctl stop firewalld
③ RMI SSL 导致的握手失败
Pain Point:CERT 错误或 rmi_keystore.jks not found
解决办法:
# 在 jmeter.properties 中关闭 SSL
server.rmi.ssl.disable=true
# 若必须使用 SSL,请自行生成 keystore 并配置以下参数:
# server.rmi.ssl.keystore.file=/path/to/keystore.jks
# server.rmi.ssl.keystore.password=yourPassword
④ 高并发导致的端口耗尽 / NoRouteToHostException
排查步骤:
-
检查程序可用临时端口范围:
/proc/sys/net/ipv4/ip_local_port_range -
适当扩大范围,例如:
# echo "1024 65535"> /proc/sys/net/ipv4/ip_local_port_range # 永久写入 /etc/sysctl.conf 并 reload net.ipv4.ip_local_port_range = 1024 65535 sysctl -p -
关闭 TIME_WAIT 持有时间:
# sysctl -w net.ipv4.tcp_tw_reuse=1 # sysctl -w net.ipv4.tcp_tw_recycle=1 # CentOS 7+ 已废弃。
四、超时设置与资源调整技巧
a) 增加 HTTP 请求超时时间
- Connect Timeout :15000~30000
- Sockets Timeout :30000~60000
b) 调整 JMeter 全局超时参数
# 编辑 bin/jmeter.properties,修改以下两项:
http.socket.timeout=60000 # 响应读取超时
http.connection.timeout=30000 # 建立连接超时
tcp.connection.timeout=20000 # TCP 层面连接超时
# /etc/sysctl.conf 示例片段
net.core.somaxconn = 65535 # 单个监听套接字最大并发数
net.ipv4.tcp_max_syn_backlog = 4096 # SYN 队列大小提高
net.ipv4.tcp_tw_reuse = 1 # 重复利用 TIME_WAIT 套接字
sysctl -p # 生效配置
五、分布式压测 Master‑Slave 连通性操作参考
a) 在 Slave 上启动 JMeter Server 并指定自定义端口
# 编辑 slave 的 conf/jmeter.properties:
server_port=1567 # 任意未被占用的端口,如 1567
# 开启服务:
./bin/jmeter-server -Djava.rmi.server.hostname=$
# 若机器拥有多网卡,请确保 hostname 对应实际对外 IP。
b) 在 Master 的 jmeter.properties 中声明远程节点
# conf/jmeter.properties 示例:
remote_hosts=10.0..101:1567,10.0..102:1567 # 多台 Slave 用逗号分隔
# 如需关闭 SSL:
server.rmi.ssl.disable=true
# 保存后重新启动 GUI 或 non‑GUI 模式即可生效。
# /etc/sysctl.conf 示例片段
net.core.somaxconn = 65535 # 单个监听套接字最大并发数
net.ipv4.tcp_max_syn_backlog = 4096 # SYN 队列大小提高
net.ipv4.tcp_tw_reuse = 1 # 重复利用 TIME_WAIT 套接字
sysctl -p # 生效配置
# 编辑 slave 的 conf/jmeter.properties:
server_port=1567 # 任意未被占用的端口,如 1567
# 开启服务:
./bin/jmeter-server -Djava.rmi.server.hostname=$
# 若机器拥有多网卡,请确保 hostname 对应实际对外 IP。# conf/jmeter.properties 示例:
remote_hosts=10.0..101:1567,10.0..102:1567 # 多台 Slave 用逗号分隔
# 如需关闭 SSL:
server.rmi.ssl.disable=true
# 保存后重新启动 GUI 或 non‑GUI 模式即可生效。
="" c)<="" master→slave="" 所有涉及的端口="" 防火墙同步放通="">
{remote_hosts port}bash
sudo firewall-cmd --zone=public --add-port=1567/tcp --permanent
sudo firewall-cmd --reload
六、可直接复制的排查与修复命令清单
bash
sudo firewall-cmd --zone=public --add-port={PORT}/tcp --permanent
sudo firewall-cmd --reload
*将 {PORT} 替换为 1099、1567、8080等实际使用的端口。
七、提高测试效率的实用小技巧
- Ssd 优先级:Testrun 输出目录放在 SSD 分区,显著降低 I/O 延迟。
find /data/jmeter/results -type f -mtime +30 -delete 防止磁盘被占满。注意的观点是,所有修改完成后请 重启 JMeter 或 重新加载配置确保新参数生效。八、常见 FAQ 与常用方法
| Pain Point | 方法要点 |
|---|
server.rmi.ssl.disable=true
- 若需安全传输,自行生成 keystore 并配置对应方法和密码。怎么说呢,
firewall-cmd 放通所有 RMI 使用的端口
- 确认 SELinux 状态 如有必要设为 permissive
- 在云环境检查 Security Group 入站规则。
ip_local_port_range 范围
- 开启 tcp_tw_reuse 并适度调低 tcp_fin_timeout
- 使用长连接或 Connection Pool 减少短连创建次数。
alternatives --config java 确保运行时指向正确 JDK。其实,
。
一、常见痛点快速概览
使用者最头疼的几大问题:
- JMeter 连接超时导致脚本频繁失败。
-
RMI 通信报错
rmi_keystore.jks 不存在SSL 被强制开启。 - 防火墙或安全组未放通 1099 / 1567 等 RMI 端口出现 “Connection refused”。
- 高并发下出现 Cannot assign requested address / NoRouteToHostException往往是端口耗尽或网络绑定错误。
- Java 版本不匹配导致 “JDK version not supported”。
- 分布式压测 Master 与 Slave 无法互相通信。话说回来,
二、环境准备与快速安装 JMeter
1️⃣ 安装常用软件
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.6.x86_64.rpm
wget https://dl.grafana.com/oss/release/grafana-6.2.5-1.x86_64.rpm
sudo rpm -ivh influxdb-1.7.6.x86_64.rpm
sudo rpm -ivh grafana-6.2.5-1.x86_64.rpm
2️⃣ 下载并解压 JMeter
wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz
tar -xzf apache-jmeter-5.4.1.tgz
cd apache-jmeter-5.4.1
3️⃣ 安装 Java
sudo yum install -y java-1.8.0-openjdk-devel
java -version # 确认输出为 1.8.x
三、快速定位连接异常的排查思路
① 明确异常类型:客户端 → 被测服务 或 Master ↔ Slave
使用 telnet 或 验证端口是否可达。
② 检查防火墙/安全组设置
# 永久放通 RMI 默认端口 1099
sudo firewall-cmd --zone=public --add-port=1099/tcp --permanent
# 分布式压测常用的自定义端口,例如 1567
sudo firewall-cmd --zone=public --add-port=1567/tcp --permanent
sudo firewall-cmd --reload
# 临时测试可直接关闭防火墙
# systemctl stop firewalld
③ RMI SSL 导致的握手失败
Pain Point:CERT 错误或 rmi_keystore.jks not found
解决办法:
# 在 jmeter.properties 中关闭 SSL
server.rmi.ssl.disable=true
# 若必须使用 SSL,请自行生成 keystore 并配置以下参数:
# server.rmi.ssl.keystore.file=/path/to/keystore.jks
# server.rmi.ssl.keystore.password=yourPassword
④ 高并发导致的端口耗尽 / NoRouteToHostException
排查步骤:
-
检查程序可用临时端口范围:
/proc/sys/net/ipv4/ip_local_port_range -
适当扩大范围,例如:
# echo "1024 65535"> /proc/sys/net/ipv4/ip_local_port_range # 永久写入 /etc/sysctl.conf 并 reload net.ipv4.ip_local_port_range = 1024 65535 sysctl -p -
关闭 TIME_WAIT 持有时间:
# sysctl -w net.ipv4.tcp_tw_reuse=1 # sysctl -w net.ipv4.tcp_tw_recycle=1 # CentOS 7+ 已废弃。
四、超时设置与资源调整技巧
a) 增加 HTTP 请求超时时间
- Connect Timeout :15000~30000
- Sockets Timeout :30000~60000
b) 调整 JMeter 全局超时参数
# 编辑 bin/jmeter.properties,修改以下两项:
http.socket.timeout=60000 # 响应读取超时
http.connection.timeout=30000 # 建立连接超时
tcp.connection.timeout=20000 # TCP 层面连接超时
# /etc/sysctl.conf 示例片段
net.core.somaxconn = 65535 # 单个监听套接字最大并发数
net.ipv4.tcp_max_syn_backlog = 4096 # SYN 队列大小提高
net.ipv4.tcp_tw_reuse = 1 # 重复利用 TIME_WAIT 套接字
sysctl -p # 生效配置
五、分布式压测 Master‑Slave 连通性操作参考
a) 在 Slave 上启动 JMeter Server 并指定自定义端口
# 编辑 slave 的 conf/jmeter.properties:
server_port=1567 # 任意未被占用的端口,如 1567
# 开启服务:
./bin/jmeter-server -Djava.rmi.server.hostname=$
# 若机器拥有多网卡,请确保 hostname 对应实际对外 IP。
b) 在 Master 的 jmeter.properties 中声明远程节点
# conf/jmeter.properties 示例:
remote_hosts=10.0..101:1567,10.0..102:1567 # 多台 Slave 用逗号分隔
# 如需关闭 SSL:
server.rmi.ssl.disable=true
# 保存后重新启动 GUI 或 non‑GUI 模式即可生效。
# /etc/sysctl.conf 示例片段
net.core.somaxconn = 65535 # 单个监听套接字最大并发数
net.ipv4.tcp_max_syn_backlog = 4096 # SYN 队列大小提高
net.ipv4.tcp_tw_reuse = 1 # 重复利用 TIME_WAIT 套接字
sysctl -p # 生效配置
# 编辑 slave 的 conf/jmeter.properties:
server_port=1567 # 任意未被占用的端口,如 1567
# 开启服务:
./bin/jmeter-server -Djava.rmi.server.hostname=$
# 若机器拥有多网卡,请确保 hostname 对应实际对外 IP。# conf/jmeter.properties 示例:
remote_hosts=10.0..101:1567,10.0..102:1567 # 多台 Slave 用逗号分隔
# 如需关闭 SSL:
server.rmi.ssl.disable=true
# 保存后重新启动 GUI 或 non‑GUI 模式即可生效。
="" c)<="" master→slave="" 所有涉及的端口="" 防火墙同步放通="">
{remote_hosts port}bash
sudo firewall-cmd --zone=public --add-port=1567/tcp --permanent
sudo firewall-cmd --reload
六、可直接复制的排查与修复命令清单
bash
sudo firewall-cmd --zone=public --add-port={PORT}/tcp --permanent
sudo firewall-cmd --reload
*将 {PORT} 替换为 1099、1567、8080等实际使用的端口。
七、提高测试效率的实用小技巧
- Ssd 优先级:Testrun 输出目录放在 SSD 分区,显著降低 I/O 延迟。
find /data/jmeter/results -type f -mtime +30 -delete 防止磁盘被占满。注意的观点是,所有修改完成后请 重启 JMeter 或 重新加载配置确保新参数生效。八、常见 FAQ 与常用方法
| Pain Point | 方法要点 |
|---|
server.rmi.ssl.disable=true
- 若需安全传输,自行生成 keystore 并配置对应方法和密码。怎么说呢,
firewall-cmd 放通所有 RMI 使用的端口
- 确认 SELinux 状态 如有必要设为 permissive
- 在云环境检查 Security Group 入站规则。
ip_local_port_range 范围
- 开启 tcp_tw_reuse 并适度调低 tcp_fin_timeout
- 使用长连接或 Connection Pool 减少短连创建次数。
alternatives --config java 确保运行时指向正确 JDK。其实,
。

