《JMeter 常见问题汇总》
1 简介
本文汇总 JMeter 压测与脚本编写中常见的问题与解决方案,尤其是高并发下端口耗尽导致的失败请求。
2 Non HTTP response code: java.net.NoRouteToHostException
2.1 现象
高并发压测时报:
Non HTTP response code: java.net.NoRouteToHostException
2.2 原因
大量端口被占用、TIME_WAIT 堆积,压测端无法再建立新连接。
2.3 排查端口使用情况
netstat -n | awk '/^tcp/{++S[$NF]}END{for (key in S) print key,S[key]}'
常见输出:
TIME_WAIT 14350
CLOSE_WAIT 12
FIN_WAIT1 153
SYN_SENT 139
FIN_WAIT2 4
ESTABLISHED 545
SYN_RECV 1
若 TIME_WAIT 数量巨大,说明短连接过多、端口回收慢。
2.4 优化内核 TCP 参数
查看配置:
sysctl -p | grep tcp
编辑 /etc/sysctl.conf,以下三个开关务必确认:
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
其中:
net.ipv4.tcp_tw_reuse = 1:允许复用 TIME_WAIT 状态的端口;- 缩短
tcp_fin_timeout加快 FIN 处理。
再设置 TIME_WAIT 上限:
# 系统同时保持 TIME_WAIT 套接字的最大数量,超过后立即清除并打印警告
net.ipv4.tcp_max_tw_buckets = 30000
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
生效:
sysctl -p
3 Could not flush user prefs
WARNING: Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
说明 Java 读写 ~/.java/.userPrefs 时发生文件锁冲突,多见于同一用户多个 JVM 同时运行。可以忽略,或清理 ~/.java/.userPrefs 后重启压测。
4 URI 中多个参数的转义
当请求 URI 含多个参数(如 image?session=123&pub=456)并在 .jmx 中使用时,& 会被写成 XML 实体:
<stringProp name="HTTPSampler.path">image?session=123&pub=456</stringProp>
这是合法的 XML 转义,无需还原为 &。
5 参考文档
阅读 —
·
全站 —