判断ip_local_port_range是否真用尽需先查范围(如32768 60999共约28232端口),再用ss统计活跃ephemeral端口去重数量,接近上限(如>27000)才表明可能耗尽;netstat易漏统计且不解析端口,ss更准确可靠。
如何判断 ip_local_port_range 真的用尽了
系统报 bind: Cannot assign requested address 或 connect: Cannot assign requested address 时,不能直接断定是 ephemeral port 耗尽——更常见的是 TIME_WAIT 堆积、连接未复用、或 net.ipv4.ip_local_port_range 设置过窄。先确认当前范围:
cat /proc/sys/net/ipv4/ip_local_port_range
输出类似 32768 60999,共约 28232 个可用端口。再看已分配的 ephemeral 端口数量:
ss -tan | awk '$1 ~ /^(ESTAB|TIME-WAIT|FIN-WAIT-1|FIN-WAIT-2|SYN-SENT|SYN-RECV)$/ {print $4}' | awk -F':' '{print $2}' | sort -n | uniq -c | wc -l
这个数字接近上限(比如 >27000)才值得深入监控。
netstat 和 ss 统计结果为什么经常不一致
netstat 在高并发下会漏统计(尤其 TIME-WAIT),且默认不解析端口字段;ss 更轻量、内核态采样,推荐统一用它。关键区别在于: