在银河麒麟服务器中,可通过netstat、ss、/proc/net/tcp、lsof和sar五种方法查看tcp连接状态与统计连接数,分别适用于实时统计、高性能采集、内核级分析、进程级定位及历史趋势监控。

如果您在银河麒麟服务器操作系统中需要掌握当前TCP连接的实时状态及分布情况,则可能是由于业务响应延迟、端口耗尽或异常连接堆积导致。以下是查看TCP连接状态与统计连接数的具体方法:
一、使用netstat命令统计各状态TCP连接数
该方法通过解析netstat输出并结合awk进行状态聚类统计,可快速获知ESTABLISHED、TIME_WAIT、CLOSE_WAIT等关键状态的数量,便于定位连接异常类型。
1、执行命令:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
2、观察输出结果中各状态(如ESTABLISHED、TIME_WAIT、FIN_WAIT1)对应的数值
3、若TIME_WAIT数量持续高于5000,需检查应用是否频繁短连接且未启用端口复用
4、若CLOSE_WAIT数量异常升高,说明本机应用未主动调用close()关闭连接,可能存在资源泄漏
二、使用ss命令替代netstat获取更高效连接视图
ss是iproute2套件中的现代工具,比netstat性能更高、解析更精准,尤其适用于高并发场景下的连接快照采集。
1、查看所有TCP连接及其状态:ss -tan
2、仅显示已建立连接:ss -tan state established
3、统计各状态连接数:ss -s | grep -i tcp
4、查看监听中且带进程信息的TCP端口:ss -ltnp
5、若提示“Permission denied”无法显示进程名,需以root权限重新执行ss -ltnp
三、通过/proc/net/tcp直接读取内核TCP连接表
/proc/net/tcp是Linux内核暴露的原始TCP连接信息文件,以十六进制编码存储地址与状态,适合脚本化批量分析或排除netstat/ss不可用时的应急诊断。
1、查看原始连接条目:cat /proc/net/tcp
2、提取状态字段(第4列st)并转换为可读状态:awk '{print $4}' /proc/net/tcp | tail -n +2 | sort | uniq -c
3、将十六进制状态码对照转换(例如0A对应LISTEN,01对应ESTABLISHED)
4、统计处于TIME_WAIT状态的连接行数:awk '$4=="06" {count++} END {print count+0}' /proc/net/tcp
5、注意:/proc/net/tcp中状态值为十六进制,不可直接按字符串“TIME_WAIT”匹配
四、使用lsof按端口或进程筛选TCP套接字
当需聚焦特定服务(如Nginx监听80端口)或排查某进程(如PID 1234)所持连接时,lsof可精准定位打开的TCP套接字及其归属关系。
1、列出所有TCP连接及对应进程:lsof -iTCP -n -P
2、查看占用80端口的所有连接:lsof -iTCP:80
3、查看PID为1234的进程打开的所有网络连接:lsof -nP -p 1234 | grep TCP
4、若lsof未安装,执行:apt-get install lsof(Debian系)或 yum install lsof(RHEL系)
5、执行lsof需具备目标进程的读取权限,普通用户可能无法查看其他用户进程的socket信息
五、利用sar命令监控TCP连接历史趋势
sar可从系统历史日志中提取TCP连接创建速率、活跃连接数等指标,适用于回溯性分析连接突增或缓慢泄漏问题。
1、实时查看TCP连接摘要(每2秒刷新一次,共5次):sar -n SOCK 2 5
2、重点关注字段:totsck(总socket数)、tcpsck(TCP socket数)、udpsck(UDP socket数)、rawsck(RAW socket数)
3、查看当日历史记录(需sysstat已启用):sar -n SOCK -f /var/log/sysstat/sa$(date +%d)
4、若输出中tcpsck值持续攀升且不回落,表明存在未释放的TCP连接,需结合lsof进一步定位进程










