dproxy的一个BUG

这个问题在我进公司的时候一直就有,但是一直都没人解,这次做主干的项目被领导逼的不行了,只好亲自抄刀。

现象:在不能上外网的路由器上接多台机器,每台机器全都装上BT,像迅雷这种软件,开启多个,每个中有N多种子的时候。router跑一阵就会挂掉。dump_stack,提示内存不足。

分析:经过查找后发现是dproxy占用的内存过多。这下简单了,把这个小开源软件看了一遍,发现里面维护了一个链表。每个链表节点是

6014个字节。而这时链表的长度达到了300多(具体数字忘了)。用wiresharkZ包一看,发现迅雷果然狂发DNS包。

解决方法:后面对链表长度作限制为256,超过这个长度后就把包丢掉,发现还是不行,一路减下来,减到32发现不但内存不死机了,而且在网络接通的情况下,比原先的反应速度更快了。

总结:

开源软件DPROXY本身这并不算一个BUG,但在嵌入式上,这确是一个真真实实的BUG。前后一共花费了五天对这个BUG进行重现,而实际解决只花了半天。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值