背景:
网工面对业务反馈数据中心内部2台Server之间丢包,首先会查端到端之间所有链路有无拥塞、端口CRC问题;确认没有异常后,会开始怀疑是Server本身丢包,但我们知道,物理服务器一般会查下物理网卡有无丢包,但一般网卡丢包的可能性很小,但如果包是丢在内核网络层怎么办呢?通过抓包分析会因为场景的不同,数据的多少造成分析困难重重。Linux从2.6.30开始支持Network Drop Watch(dropwatch)功能,可以准确定位内核网络层数据包的丢弃;
dropwatch使用前提:
1、首先内核必须大于等于2.6.30;
2、编译内核时应该加上“NET_DROP_MONITOR=y”;
3、由于dropwatch是依赖Kernel Tracepoint API的,其原理是各个协议层释放skb时收集信息来判断有无丢包,用的不多,难免存在一些BUG导致内核crash,因此具备一定危险性,建议troubleshooting时,最好先切走业务;