服务器测评网
我们一直在努力

服务器怎么用ssh看链接数,如何查看服务器连接数命令

通过 SSH 登录 Linux 服务器后,查看网络连接数是评估系统负载、排查网络瓶颈以及防御攻击的基础运维技能。核心上文归纳是:在现代 Linux 系统中,最专业且高效的方式是使用 ss 命令替代传统的 netstat,因为它能直接读取内核数据,执行速度极快且资源消耗极低;通过结合 grepawkwc 等管道命令,可以精准统计出 TCP、UDP 以及各种状态下的连接数量。

服务器怎么用ssh看链接数,如何查看服务器连接数命令

使用 ss 命令进行高效统计

ss(Socket Statistics)是 iproute2 包的一部分,用于获取套接字统计信息,相比于需要遍历 /proc 文件系统的 netstatss 直接从内核获取数据,在连接数达到数万甚至数十万的高并发服务器上,ss 的响应速度具有压倒性优势。

查看所有建立的 TCP 连接数
要查看当前服务器上所有处于“已建立”状态的 TCP 连接,可以使用以下命令,这是判断服务器当前活跃并发量的最直接指标:

ss -ant | grep ESTAB | wc -l

解释:

  • -a:显示所有套接字。
  • -n:不解析服务名称,直接显示数字端口号,显著提升执行速度。
  • -t:仅显示 TCP 套接字。
  • grep ESTAB:筛选出状态为 ESTABLISHED 的连接。
  • wc -l:统计行数,即连接总数。

查看所有监听端口
了解服务器开启了哪些服务端口是安全审计的重要环节:

ss -lnt

如果只统计监听端口的数量,可以结合 wc -l 使用。

获取汇总统计信息
ss 提供了一个非常实用的参数 -s,可以直接输出 TCP 连接的总体概况,包括已建立、等待关闭等状态的总数,无需手动计算:

ss -s

输出结果中的 TCP 栏目会清晰列出 estab(已建立)、closed(已关闭)等计数,这是快速概览服务器网络压力的首选方法。

传统 netstat 命令的使用方法

尽管 ss 是现代标准,但许多老旧系统或运维习惯中仍保留 netstat,虽然性能较差,但在连接数较少(几千以下)时,其可读性较好。

统计所有 TCP 连接数:

netstat -ant | wc -l

统计特定状态的连接数(如 TIME_WAIT):

服务器怎么用ssh看链接数,如何查看服务器连接数命令

netstat -ant | grep TIME_WAIT | wc -l

注意:在连接数巨大的服务器上频繁执行 netstat 可能会导致 CPU 飙升,建议优先使用 ss

深入解析 TCP 连接状态

单纯统计数字是不够的,专业的运维人员需要理解不同状态连接数背后的含义,以便进行故障排查。

ESTABLISHED(已建立连接)
代表正常的业务数据传输连接,如果此数值异常飙升,通常意味着业务流量突增或发生了慢攻击,需要结合业务日志判断是正常用户访问还是恶意流量。

TIME_WAIT(等待关闭)
这是 TCP 协议保证数据可靠传输的机制,主动关闭连接的一方会短暂进入此状态,如果服务器上 TIME_WAIT 连接数过多(例如超过 3万),可能会导致端口资源耗尽,无法发起新连接。

  • 专业见解:少量的 TIME_WAIT 是正常的,如果堆积严重,通常是因为服务器作为客户端频繁请求后端其他服务(如数据库、API接口)且连接没有复用,解决方案包括调整内核参数 net.ipv4.tcp_tw_reuse,允许将 TIME_WAIT 套接字重新用于新的 TCP 连接。

CLOSE_WAIT
如果服务器出现大量 CLOSE_WAIT 状态,这通常是应用程序层面的 Bug,它意味着对方已经发起了关闭连接请求,但服务器端的应用程序没有调用 close() 方法来关闭 socket,这会导致文件描述符泄漏,最终耗尽服务器资源,此时应重点检查应用代码的异常处理逻辑。

SYN_RECV
处于“收到连接请求,但尚未完成三次握手”的状态,SYN_RECV 数量激增,极有可能是遭遇了 SYN Flood 攻击,这是一种半开连接攻击,恶意用户发送大量 SYN 包但不回应最后的 ACK,填满服务器的连接队列。

  • 解决方案:启用 SYN Cookies(net.ipv4.tcp_syncookies = 1)或增加半连接队列长度(net.ipv4.tcp_max_syn_backlog)。

实战场景:监控特定端口连接

在实际运维中,我们往往只关心特定服务(如 Nginx 的 80 端口或 MySQL 的 3306 端口)的连接情况。

查看 Nginx (80端口) 的并发连接数:

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

查看连接到某个远程 IP 的连接数(用于排查是否被单一 IP 攻击):

ss -ant | dst <攻击源IP> | wc -l

或者使用 awk 进行更复杂的分组统计,例如查看每个 IP 连接本机的次数:

服务器怎么用ssh看链接数,如何查看服务器连接数命令

ss -ant | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -rn | head -n 10

这条命令能列出连接数最多的前 10 个客户端 IP,是分析流量来源的神器。

服务器连接数优化与调优

当发现连接数成为瓶颈时,除了排查攻击,还需要对系统参数进行专业调优。

增加最大文件描述符限制
Linux 默认的文件描述符限制(ulimit)可能只有 1024,这对于高并发 Web 服务是不够的,需要修改 /etc/security/limits.conf,将 nofile 值调整为 65535 或更高。

调整 TCP 全连接队列
如果全连接队列满了,客户端在握手时就会收到 RST 或丢包,需要调整 net.core.somaxconn 和应用层面的 backlog 参数(如 Nginx 的 listen 指令中的 backlog),确保队列足够容纳突发流量。

端口范围调整
作为客户端发起大量连接时,可能会受限于本地临时端口范围,可以通过调整 net.ipv4.ip_local_port_range 来扩大可用端口范围。

通过 SSH 灵活运用上述命令和调优策略,可以全面掌控服务器的网络健康状况,确保服务的高可用性。

相关问答

Q1:为什么我的服务器 TIME_WAIT 状态的连接非常多,会影响业务吗?
A1: TIME_WAIT 状态是 TCP 协议正常关闭流程中的被动关闭方保持的状态,用于确保最后的 ACK 能够到达,在服务器作为客户端频繁请求后端资源时,TIME_WAIT 多是正常的,只要总数没有达到系统的 ip_local_port_range 上限或文件描述符上限,通常不会影响业务,但如果数量过大(如数万),建议开启 net.ipv4.tcp_tw_reuse 参数,允许内核在安全的情况下复用 TIME_WAIT 套接字,从而减少资源占用。

Q2:如何实时监控服务器当前的 TCP 连接数变化?
A2: 可以使用 watch 命令结合 ss 来实现实时刷新监控,执行 watch -n 1 'ss -ant | grep ESTAB | wc -l',该命令会每秒刷新一次当前已建立的连接数,如果需要更详细的监控,建议使用 Prometheus + Node Exporter 等监控工具,通过图形化界面长期观察连接数的趋势曲线,这比单纯看瞬时数值更有意义。

互动

如果您在查看服务器连接数时遇到了其他异常状态,或者有更高效的统计脚本分享,欢迎在评论区留言,我们一起探讨更优的运维解决方案。

赞(0)
未经允许不得转载:好主机测评网 » 服务器怎么用ssh看链接数,如何查看服务器连接数命令