接上回说,https://mzhan017.blog.csdn.net/article/details/142689870;
其中在debug的过程中,看到下面这个IO图,这个图比较经典,是一个典型的网络延迟图,可用作为分析问题的一个参考。
如下图:黑色的线是当前VM发出的包;红色的线是当前VM收到的包的数量,以到达二层/tcpdump抓包的点为准。
从上图可用看出来,画圈的地方,有大约10秒的时间,只有发包,没有收包。过了十秒之后,进来的包突然增多。
这个可能的原因就是,进来的包被queue在了二层之前:或者是当前VM的网卡或者驱动,或者是网络上的某个设备。所以下一步要通过其他现象来推测是哪里有问题,或者直接从主机层抓包验证。
警告后续的分析,在主机上 的vnet抓包看,发现包已经转发到了VM层,也就是收进来的包被缓存在了虚拟机的virio-net设备或者驱动的ioring里。
最后分析的结果就是当时某个进程的优先级比内核的优先级还要高,而且是高CPU使用率,导致内核都来不及处理网络包。只有当这个高优先级的程序被kill之后,网络包才恢复。