众所周知,中国的运营商都对udp有qos.当udp包太多时就会挤掉其他应用的udp连接.虽然比特彗星可以限制每秒udp包数量,但是没有发送的udp包会缓存在内存里面.
但是当活动种子很多(我日常200+)且每个种子都有大量tracker服务器(100+)和连接了大量dht节点(2w+),比特彗星每秒发送的udp包数量会直接爆掉运营商的udpqos,导致其他使用udp的应用堵塞.此时如果不想让彗星挤掉其他应用的udp连接就得限制每秒udp包数量,但是如果限制的太低udp包就会堵塞在内存里面导致爆内存.有没有能解决这个问题的办法
争对部分省份运营商限制tcp/udp并发连接数
可以查看统计分类,展开udp数据包,查看是什么包在阻塞,一般情况下为dht,可以直接禁用dht网络
现在版本只有dht有丢包机制,在高级设置中开启,达到队列限制后收到dht查询包则不会回复包,直接丢弃
如果非要启用dht,可以尝试改成1,尽可能的把dht数据包丢弃不进行发送
dht.udp_send_queue_threshold
注,该选项设置后只会丢弃接收到DHT的请求后udp回复包,主动发起的查询包不会进行丢弃
设置丢弃后如图所示,queue send: 0, threshold: 100, dropped queries: 190,924
一旦因为错误限制了network.max_udp_pkt_per_sec 引发的队列问题,发生queue send时,则会立即丢弃dht的数据包
我试试,观察一段时间
还有极少的概率是TCP的ACK请求,不过目前没听说反馈有运营商限制,如果遇到限制就调整 network.max_connecting_connections