登录
首页 >  文章 >  linux

Linux查看当前并发连接方法

时间:2026-04-02 10:36:31 317浏览 收藏

本文深入解析了在现代Linux系统中高效监控TCP并发连接的核心方法,强调用轻量、快速的`ss`命令全面替代过时且低效的`netstat`,涵盖快速统计总连接数、精准筛选指定端口(如8080)的ESTABLISHED和SYN-RECV连接、识别监听进程、排除本地回环干扰,以及结合listen队列和健康探针构建防雪崩监控体系——所有技巧均基于内核socket表直读,毫秒响应,适配新内核与容器环境,助运维和开发者真正看清服务真实承载压力。

linux怎么查看当前并发连接_linux监控网络连接【实战】

怎么快速看当前所有 TCP 连接数

直接用 ss,别用过时的 netstat——它要遍历 /proc,慢且在新系统里常被删掉。ss 读取内核 socket 表,毫秒级响应,而且默认就装在大多数现代发行版里。

  • ss -s:一眼看到总计多少 ESTAB、TIME-WAIT、LISTEN 等状态连接(注意:这个总数不含 UDP)
  • ss -tn | wc -l:只统计 TCP 连接行数(-t 是 TCP,-n 不解析域名/服务名,避免 DNS 查询拖慢)
  • 想排除本地回环?加 src != 127.0.0.1:比如 ss -tn src != 127.0.0.1 | wc -l

怎么查某个端口被谁占着、连了多少人

比如发现 :8080 响应变慢,得立刻知道是不是连接堆积了。重点不是“谁在连”,而是“连得太多导致队列满”——这时候 ss -tnlplsof 更准更快。

  • ss -tnlp 'sport == :8080':精确匹配监听 8080 的进程(sport 是 source port,即本机监听端口)
  • 看 ESTAB 连接数:用 ss -tn state established '( dport == :8080 )' | wc -l(注意是 dport,因为对服务端来说,对方连过来的目标端口才是 dport
  • 如果输出为空但连接明显卡住,可能是连接卡在 SYN_RECV(半开),加 state syn-recv 单独查

为什么 netstat -an | grep ESTAB | wc -l 结果不准

这不是命令写错了,是底层机制变了。Linux 4.1+ 内核默认开启 tcp_tw_reusetcp_fin_timeout 调优,大量连接会快速进入 TIME-WAIT,但 netstat 把它们全算进“活跃连接”;而 ss 默认不显示 TIME-WAIT,更贴近真实并发压力。

  • netstat 统计的是“当前 socket 结构体数量”,包含大量已关闭但未彻底回收的连接
  • ss -s 输出里的 tcp 行第一列是“total connected”,第二列才是 ESTAB,别看错位置
  • 某些容器环境(如 Docker with userland-proxy),netstat 可能根本看不到宿主机视角的连接映射

监控脚本里该用什么指标防雪崩

单纯看“总连接数”没意义。Web 服务扛不住,往往是因为 ESTAB + SYN_RECV 合计超过应用层连接池上限(比如 Nginx 的 worker_connections),或触发了内核 backlog 队列溢出。

  • 关键指标组合:ss -s | awk '/TCP:/ {print $2}'(ESTAB)、ss -s | awk '/SYN-RECV:/ {print $2}'(半开)
  • 检查 listen 队列是否打满:ss -lnt | awk '$4 ~ /:/ {print $4,$5}',第三列是 Recv-Q,持续 > 0 就说明 accept() 跟不上了
  • 不要用 cat /proc/net/tcp 解析——十六进制地址难读,状态码要查表,还容易漏掉 IPv6

真正卡住的时候,往往不是连接数爆了,而是某个后端服务响应慢,把连接池全占住又不释放。盯住 ESTAB 数的同时,一定得配合 curl -o /dev/null -s -w '%{http_code}\n' http://localhost:8080/health 这类探针。

理论要掌握,实操不能落!以上关于《Linux查看当前并发连接方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>