记录一次丢包事故与排查总结
最近出现了一次很严重的组播丢包事故,排查了很长时间才找到原因,特地记录一下 背景 程序本身是单进程、双线程的一个程序,一个线程用来接收网卡上的组播数据,另一个线程将接收到的组播数据再转发出去。数据存取的正确性用一个互斥变量来实现。 现象 发现丢包是因为发现不同机器上下游系统收到的数据量不一致。 这个程序部署在了好几台机器上,组播数据丢包现象经常产生,一般发生在组播数据量最大的时刻,但并非所有程序同时丢包,且丢的包也不一样。 排查 最开始在我们自测的时候并未出现过丢包的问题,因此一开始并未怀疑是程序问题造成的丢包,怀疑可能是环境问题。 首先怀疑是交换机丢包了,但交换机是万兆带宽,且数据量并不是特别大,应该不会出现丢包才对,后来从交换机镜像上抓包后分析,发现确实不是; 后来怀疑可能是程序部署的机器有问题,从机器上抓包分析机器也没有丢包; 那么只可能是程序的问题或者机器处理性能的问题了... 首先了解了一下服务器的配置,至强E系列的4代处理器,24核,32g内存,性能应该是足够的,到这里只能说明是程序处理时产生了丢包现象。 最开始怀疑是程序收发时的处理逻辑有问题,可能引起卡顿导致丢包,但在我....