需借助netstat、ss、awk、lsof及/proc/net/tcp等工具查看并统计TCP连接状态:netstat全面但较慢,ss高效适合高并发,awk可聚合统计,lsof定位进程归属,/proc/net/tcp提供内核级原始数据。

如果您需要掌握当前系统中所有活跃或非活跃的TCP连接状况,例如排查连接异常、识别异常长连接或统计并发连接数量,则需借助网络状态统计工具。以下是查看TCP连接状态及统计连接数的具体操作方法:
一、使用netstat命令查看并统计TCP连接状态
netstat是传统且全面的网络统计工具,可列出所有TCP连接的状态(如ESTABLISHED、TIME_WAIT、LISTEN等),并支持按状态分类计数,适用于快速掌握连接分布。
1、打开终端,执行以下命令查看全部TCP连接及其状态:
2、若仅需统计各状态下的连接数量,运行:
3、如需聚焦于已建立的连接(ESTABLISHED),输入:
4、观察输出中State列的值,ESTABLISHED表示双向通信正常,TIME_WAIT表示主动关闭方等待确认,CLOSE_WAIT表示被动关闭方等待应用关闭socket。
二、使用ss命令高效获取TCP连接详情
ss是现代替代netstat的高性能工具,解析内核socket信息更直接,响应更快,尤其适合高并发场景下实时查看连接状态。
1、执行以下命令列出所有TCP连接及其状态摘要:
2、统计各TCP状态连接数(不显示具体连接):
3、筛选出处于SYN_RECV状态(半连接)的连接,用于识别潜在SYN洪泛迹象:
4、ss -s 输出顶部的“TCP:”行直接给出总连接数及各状态细分,无需额外管道处理。
三、结合awk对netstat输出进行状态聚合统计
当需将netstat原始输出转化为结构化统计结果(如生成表格形式的状态计数),可利用awk进行字段提取与分组计数,提升分析效率。
1、运行以下命令一次性统计所有TCP状态出现频次:
2、若只关注非监听类连接(排除LISTEN状态),添加条件过滤:
3、该命令将输出类似"ESTABLISHED 42"、"TIME_WAIT 187"的键值对,便于人工或脚本进一步处理。
四、使用lsof按进程维度查看TCP连接归属
当发现某类连接数量异常偏高时,需定位到具体进程以判断是否为预期行为;lsof可将每个TCP连接关联至发起它的进程名、PID及用户,实现根源追踪。
1、确保lsof已安装,若未安装则执行:
2、列出所有TCP连接及其对应进程信息:
3、统计每个进程打开的TCP连接数(按COMMAND列聚合):
4、重点关注COMMAND列为java、nginx、mysqld等服务名的高连接数条目,可能指向业务负载或连接泄漏。
五、通过/proc/net/tcp直接读取内核TCP连接表
/proc/net/tcp是内核暴露的原始TCP连接快照,以十六进制地址和端口形式记录,适用于无外部工具依赖的极简环境或自动化脚本解析。
1、查看IPv4 TCP连接原始数据(含inode、状态码等底层字段):
2、状态字段为十进制数值(如0A表示LISTEN,01表示ESTABLISHED),可用printf转换解读:
3、统计当前连接总数(跳过表头行):
4、该文件中sl列序号即为连接索引,行数减1即为当前TCP连接总数,是最轻量级的统计方式。










