可以在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
输出内容如下:
相关主题