可以在Linux系统中使用netstat命令来查看TCP连接状态。
简介 TCP(Transmission Control Protocol)传输控制协议是一种标准,它定义了如何建立和维护两个系统之间的网络会话,以促进应用程序之间的数据交换,Internet协议(IP)定义了系统如何相互发送数据包。
Linux中的TCP状态列表 下面是可以在Linux中使用netstat或ss命令(ss命令_Linux ss命令使用详解:获取socket统计信息)查看的TCP连接状态列表:
检查程序TCP状态 使用以下命令检查Linux服务器上的所有应用程序TCP状态,它将为你提供每种状态下的进程数: # netstat -nat | awk '{print $6}' | sort | uniq -c | sort -r
通过将输出传递给grep来获取特定状态的进程列表 例如,要使进程处于CLOSEWAIT状态,请使用# netstat -apn | grep CLOSE_WAIT,可以进一步过滤此输出以获取处于CLOSEWAIT状态的进程的进程ID: netstat -apn | grep CLOSE_WAIT | awk '{ print $7 }' | sort | uniq -c | sort -nr
使用head将输出限制为前10个进程 如果要使用CLOSE_WAIT TCP连接状态将输出限制为前10个进程,请使用head: # netstat -apn | grep CLOSE_WAIT | awk '{ print $7 }' | sort | uniq -c | sort -nr | head -n 10
上图中,表明ID为8166的进程具有3856个CLOSE_WAIT连接状态。 如果缺少TCP连接或进行故障排除,则可能需要使用大量CLOSE_WAIT连接状态来识别此过程,这可能意味着应用程序不会按预期关闭连接: # ps 8166
识别TCP连接状态的计数以及CLOSE_WAIT中具有多个状态的进程脚本 我创建了一个简单的bash脚本,它使用netstat命令来识别TCP连接状态的计数以及CLOSE_WAIT中具有多个状态的进程: #!/bin/bash # Script to print Linux TCP connections using netstat # Guthub: https://github.com/jmutai # # vvvv vvvv-- the code from above RED='3[0;31m' NC='3[0m' # No Color echo "" echo -en "${RED} ALL TCP Connections Count: ${NC}\n" netstat -nat | awk '{print $6}' | sort | uniq -c | sort -r echo "" echo -en "${RED} Top CLOSE_WAIT state TCP Connections: ${NC}\n" netstat -apn | grep CLOSE_WAIT | awk '{ print $7 }' | sort | uniq -c | sort -nr | head -n 10 输出内容如下:
相关主题 |