linux 执行 netstat -ntpl 命令卡住不动怎么办

Netstat的定义

Netstat是在内核中访问中国络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告

从定义上和执行命令后的显示过程中就可以看出,运行此命令会产生很多条结果,都是关于IP或者各个已经产生连接的端口信息,相当于病毒软件查杀病毒时的状态,会对电脑已经产生的连接进行逐条扫描,因此它显得很慢,这是很正常的。 netstat命令的功能是显示中国络连接、路由表和中国络接口信息,可以让用户得知有哪些中国络连接正在运作。使用时如果不带参数,netstat 显示活动的 TCP 连接

问题说明

大家有没有遇到这种情况,登录服务器是卡在那里不动,ctrl+c才能出现命令提示符;执行netstat -tlnp | grep mongo时,又卡住了,ctrl+c也无法退出,ctrl+z也不行;类似的ps 和top也有这样的情况,这是那里出了问题

根据netstat的原理可以知道 netstat会对产生的连接进行逐条扫描,这也就影响了netstat的查询效率

可以确认的是系统负载无压力。  

在Linux下,如果连接数比较大,可以使用效率更高的ss来替代netstat。

ss 和 netstat 命令

netstat 命令和 ss 命令比较类似,主要功能也是统计系统中socket相关信息,和 netstat相比,ss 命令在跟踪TCP连接和套接字方面速度更快,功能更强大,下面是 ss 和 netstat 统计速度的对比

[cgyx@cghost35 ~]$ time ss -a | wc -l
439

real   0m0.014s
user   0m0.004s
sys     0m0.010s
[cgyx@cghost35 ~]$ time netstat -a | wc -l
366

real   0m0.029s
user   0m0.005s
sys     0m0.008s

从上面例子可以看出,ss 统计 439 条 socket 信息花费了 0.014s, netstat 统计366条socket信息花费了0.029sss 统计信息的速度更快,所以实际使用中一般都是用 ss 替代 netstat

注意: netstat命令 上的参数在 ss命令上都通用

套接字处于什么状态,下面是TCP套接字的所有状态及说明,

实际上就是TCP的三次握手和四次挥手的所有状态

CLOSED         初始(无连接)状态。
LISTEN         侦听状态,等待远程机器的连接请求。
SYN_SEND       在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
SYN_RECV       在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。
ESTABLISHED   完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
FIN_WAIT_1     在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
FIN_WAIT_2     在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
TIME_WAIT     在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
CLOSING       在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。
CLOSE_WAIT     在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
LAST_ACK       在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。

主动连接端可能的状态有:   CLOSED       SYN_SEND       ESTABLISHED
主动关闭端可能的状态有:   FIN_WAIT_1   FIN_WAIT_2     TIME_WAIT
被动连接端可能的状态有:   LISTEN       SYN_RECV       ESTABLISHED
被动关闭端可能的状态有:   CLOSE_WAIT   LAST_ACK       CLOSED

在Linux下,如果连接数比较大,可以使用效率更高的ss来替代netstat。
查看tomcat的并发数:netstat -an|grep 10050|awk '{count[$6]++} END{for (i in count) print(i,count[i])}'

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/336.html

发表评论

登录后才能评论