Linux查看网络连接数,ss和netstat命令统计

前言

服务器被攻击了?网站访问量突然暴涨?想看看当前有多少人在连接你的服务器?这时候就需要查看网络连接数了。ss 和 netstat 是两个最常用的网络连接查看命令,ss 是新版,速度更快,推荐优先用。本文就讲一下怎么用这两个命令统计网络连接数、排查网络问题。

ss 命令(推荐)

ss 是 iproute2 包自带的,比 netstat 快很多,尤其是连接数很多的时候。

基本用法

ss

显示所有TCP和UDP连接。

统计各状态连接数

ss -s

输出示例:

Total: 120
TCP:   80 (estab 30, closed 40, orphaned 0, timewait 20)

Transport Total     IP        IPv6
RAW       0         0         0
UDP       5         3         2
TCP       80        60        20
INET      85        63        22
FRAG      0         0         0

这就是全局统计,一眼就能看出当前有多少连接。

查看TCP连接

ss -t

只显示TCP连接。

查看所有监听端口

ss -tlnp

参数说明:

  • -t:TCP
  • -l:只显示监听状态的
  • -n:不解析域名,直接显示IP和端口
  • -p:显示进程名

统计某个端口的连接数

比如统计80端口的连接数:

ss -tn | grep :80 | wc -l

统计各状态的TCP连接数

ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

输出示例:

40 ESTAB
30 TIME-WAIT
10 LISTEN
5 CLOSE-WAIT

netstat 命令

netstat 是老牌命令,很多老脚本还在用。

基本用法

netstat -tlnp

查看监听的TCP端口。

统计各状态连接数

netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

统计某个端口的连接数

netstat -an | grep :80 | wc -l

查看哪个进程在监听某个端口

netstat -tlnp | grep :80

连接状态详解

TCP连接有很多状态,常见的:

状态 含义
ESTABLISHED 已建立连接,正在通信
LISTEN 监听中,等待连接
TIME_WAIT 主动关闭方等待,防止旧包干扰新连接
CLOSE_WAIT 被动关闭方等待,说明程序没正确关闭连接
FIN_WAIT1 主动关闭方,等待对方回应
FIN_WAIT2 主动关闭方,已经收到对方回应

重点关注:

  • ESTABLISHED 多:说明当前活跃连接多,正常
  • TIME_WAIT 多:说明短连接很多,正常但要注意
  • CLOSE_WAIT 多:说明程序有bug,没正确关闭连接

实际排查案例

案例1:看看当前有多少人访问网站

ss -tn | grep :80 | grep ESTAB | wc -l

统计80端口已建立连接的数量。

案例2:看看哪个IP连接最多

ss -tn state established '( sport = :80 )' | awk '{print $4}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -10

输出连接最多的前10个IP。

案例3:看看是不是被攻击了

如果突然有大量 TIME_WAIT 或 CLOSE_WAIT,可能是被攻击了。

ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

常见坑

坑1:连接数多就是被攻击了

连接数多不一定是被攻击。如果是正常的网站访问量上涨,连接数多是正常的。要看连接来源IP分布和连接状态。

坑2:TIME_WAIT 多就优化

TIME_WAIT 是TCP协议的正常机制,不需要太紧张。除非 TIME_WAIT 数量特别多(几万几十万),影响了性能,再考虑优化。

坑3:CLOSE_WAIT 多不处理

CLOSE_WAIT 多说明你的程序有bug,没有正确关闭连接。时间长了会把文件句柄用完,导致新连接建不起来。这是程序问题,要改代码。

总结

查看网络连接数的核心命令:

  1. ss -s:快速看全局统计
  2. ss -tlnp:看监听端口和对应进程
  3. ss -tan | awk '{print $1}' | sort | uniq -c:统计各状态连接数
  4. netstat:老命令,兼容性好,但慢

推荐用 ss,比 netstat 快很多,尤其是连接数很多的时候。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:39