网络问题的排查解决

一条很有用的命令解决tcp数据发送积压问题netstat -anpt|grep 2181|awk ‘{if($2!=0||$3!=0) print $0}’

 

以kafka为例:开源kafka默认配置的据传输端口是2181,kafka server会监听2181端口,等待客户端连接,

 

netstat -anpt的输出所有的tcp连接信息

 

netstat -anpt|grep 2181输出和2181有关的端口的连接信息

 

man netstat一下如下图:

第二列recv-q 代表此连接,内核已把数据接收到的tcp的缓冲区,但还未被应用程序调用read读走

第三列send-q代表此连接,应用程序已调用write写进tcp缓冲区并且已经发送到接收端但接收端还未确认的数据

 

情况1

如果接收端recv-q有大量积压代表本机应用程序有问题,可能存在性能问题,数据已从网卡拷贝到tcp内核接收缓冲区就待应用程序调用read拷贝到用户空间了,此时增加多个线程处理即可,如果应用要把数据落盘,或再通过网络转发走,还要关注是否,是磁盘和下一环节的网络问题导致

例如:如果发现kafka broker节点2181端口recv-q积压比较多,在cpu充足的情况下适当增加网络io和磁盘io线程,同时查看iowait

 

情况2

如果发送端send-q有大量积压,

1:接收端的recv-q没有积压则代表,发送端与接收端的网络,或网卡有问题,可用traceroute查看具体是网络链路的那一环节出现了问题,如果链路的每一环节都没问题那就是网卡的问题了

2:接收端的recv-q有积压则代表,同 情况1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章