netstat 显示超过 44K 连接,但没有 IP 地址,那是什么?

netstat 显示超过 44K 连接,但没有 IP 地址,那是什么?

我有一个关于 linux netstat 的使用和输出结果的问题。我正在尝试解决为什么我的服务器面临通信延迟和瓶颈问题的困境,所以我开始挖掘和研究,我需要知道的一件事是按 IP 地址分组的完整连接列表和已建立的计数数量连接,所以我首先得到这个:

[root@ip-localhost ec2-user]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

  ...
  9 77.70.115.30
 14 54.211.25.39
198 172.31.30.15

3951

问题是,如果我对每个 ip 列出的连接数量进行汇总,我得到的总数不会是 3951,该数字也会增加到超过 44K,那么,没有 ip 地址的最终行数代表什么?文件描述符?可能的内部内核连接?忘记了系统打开的套接字?

我还总结了这些联系:

[root@ip-localhost ec2-user]# netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
   1 established)
   1 Foreign
   4 FIN_WAIT1
   8 SYN_SENT
  57 LISTEN
  67 SYN_RECV
 180 TIME_WAIT
1040 LAST_ACK  
6323 CLOSE_WAIT  
7209 ESTABLISHED  

````

注意:我必须插入完整的输出,因为在 netstat 输出的末尾列出的连接没有总计。谢谢

答案1

好吧,我认为您应该在应用 awk 并剪切输出之前首先了解命令 netstat。

netstat -ntu 

将显示所有 udp 和 tcp 连接,包括 tcp6。因此,当您尝试对 netstat 命令的输出应用 awk & cut 时

netstat -ntu | awk '{print $5}' | cut -d: -f1

然后 cut 命令选择“:”作为分隔符并显示第一个字段。

tcp v4 连接如下所示

12.34.56.78:80

tcp v6 连接在 netstat 输出中如下所示

::1:631

现在,当您应用带有分隔符“:”的剪切时,tcp v4 连接的输出将显示 IP 地址,但 tcp v6 的输出将是一个空行。并且应用 sort|uniq -c 将计算空白行。

如果您想列出与您的 Web 服务器建立的所有 tcp 连接,请尝试此操作

netstat -npa | grep pid_of_your_web_server | grep ESTABLISHED  | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c 

或者与您的 Web 服务器相关的所有 tcp 连接

netstat -npa | grep pid_of_your_web_server | grep tcp | grep -v LISTEN | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c

计算所有的总数,不进行分组

netstat -npa | grep pid_of_your_web_server | grep tcp | grep -v LISTEN | wc -l

答案2

抱歉跳到旧主题,但改进永远不会太晚,为什么不使用一个 awk 来完成所有事情,而不是像这样在 grep 上浪费资源:

netstat -npa | awk -F: '/tcp/&&/LISTEN/ {print $1}' | sort | uniq -c

相关内容