今天拿起来了以前一个写的程序,因为要上线了,所以同事进行了一次压力测试,经过测试,部分发送的UPD数据包被抛弃了,只好埋头处理了。
  基本程序是这样的,建立UPD服务器用来接收数据包,创建另一个线程处理数据,完成逻辑需求,刚开始我是用一个全局字符串保存数据的,每次只能接收到61个数据包,以后的全被抛弃了,起初以为是PYTHON的字符串导致的结果,所以又将字符串转换为列表,效果依然一样,因为PYTHON提供了QUEUE的模块,所以又将列表转换为队列处理,终于超过61个啦,这个兴奋啊,有句话说的好,事情往往不是那么简单的,查询了日志,发现中间莫名其妙的丢掉了N多数据包,发送的值越大,丢包越严重。
  第二天经过G,找到了,期间详细的说明了怎样检测UDP丢包和改变UDP缓存大小,所以检测了我的小LINUX上的设置情况 sysctl -a | grep net.core,数据显示是128K,经过适当放大以下两个参数
  net.core.rmem_default
  net.core.rmem_max
  在经过测试,果然丢包的问题解决了。