Netstat 中 Recv-Q和Send-Q状态
1.使用netstat命令,用来显示各种网络信息,比如网络连接、端口号、协议、状态、进程ID等信息;
使用lsof命令,用来显示当前系统打开文件的信息,因为包括端口和网络状态在linux和mac中都属于文件,所以系统也为它们分配了文件描述法fd。
2.在Linux上面使用的方法通常为:netstat -nltp,参数含义为:查询TCP协议写Listen的信息
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
3.但是在Mac上执行该命令,会报如下的错误
4.在Mac上正确使用的方法是:即-f需要加上地址族,-p需要加上协议TCP或者UDP等
netstat [-AaLlnW] [-f address_family | -p protocol]
netstat [-gilns] [-v] [-f address_family] [-I interface]
netstat -i | -I interface [-w wait] [-c queue] [-abdgqRtS]
netstat -s [-s] [-f address_family | -p protocol] [-w wait]
netstat -i | -I interface -s [-f address_family | -p protocol]
netstat -m [-m]
netstat -r [-Aaln] [-f address_family]
netstat -rs [-s]
a)如果需要查询inet,netstat -anvf inet
b)如果需要查询TCP, netstat -anvp tcp
b)如果需要查询UDP,netstat -anvp udp
实时监控网络状态:
watch -n 1 netstat -ant
执行命令查看当前网络状态时候发现,执行了命令 netstat -anp
b1发现recv-q 和 send-q 状态不是很正常,对这2个参数不了解,特意学习了一下,简单总结如下:
recv-Q 表示网络接收队列
表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
send-Q 表示网路发送队列
对方没有收到的数据或者说没有Ack的,还是本地缓冲区.
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
从图中可以看到是大量的 send-Q ,可以判定是发送数据给目的地址的时候出现了阻塞的问题,导致了包堆积在本地缓存中,不能成功发出去。那么问题就产生在了客户端,根据公司的业务逻辑发现是客户端发送的TCP长连接数量过多。验证办法,尝试减少客户端和服务的长连接.查看效果