《JMeter 常见问题汇总》

《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&amp;pub=456</stringProp>

这是合法的 XML 转义,无需还原为 &。

5 参考文档

阅读 — · 全站 —
🎸 我的歌单 0 首