Comments (28)
我也遇到了,默认5秒 也经常报
ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 12924
并且连续报了以后,就会core dumped
from chinadns-ng.
修改奥了-o 10 以后再-r 打开了多线程,运行了2个chinadns-ng进程后,发现稳了很多
from chinadns-ng.
默认超时5秒并没有问题,你们出问题只是因为你们的可信dns不稳定,总是丢包导致的。
from chinadns-ng.
不建议设置超长的超时时间,比如10秒。实际上如果10秒上游都没有响应,都没必要等待它的结果了。客户端自己会重试的,没有必要设置这么长的超时时间。这么做只会积累没必要的查询上下文数据在chinadns-ng内存里面,反倒会增加coredump的风险。coredump产生的原因应该是unique_msgid溢出导致的,因为这个字段只有16位长,最大也就是65535。当内存中的请求上下文数量超过此值时就可会产生内存错误。按理来说我确实应该在收到dns查询请求时先检查hashtable容量是否足够,但是我现在还没这么做,因为我觉得不应该会堆积65535个请求在内存中。
from chinadns-ng.
可以适当指定 --repeat-times
选项,比如3或者5。一次性向可信dns上游发送多个重复查询请求,可以在一定程度上减轻timeout的问题。而不是设置超长的timeout时间,这不是一个好的做法。
from chinadns-ng.
多谢回复,也许是梯子不稳定导致的。我尝试使用--repeat-times。
另外请问下,我运行以下命令:
((./chinadns-ng -r -b 0.0.0.0 -l 5453 -c 223.5.5.5 -t 192.168.100.253#5553 -g gfwlist.txt -o 10 -v ) >chinadns-ng.log1 &)
在log1文件里没发现类似
ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid
是不是-v 后err信息无法输入到log1里,也可能是因为-o 10秒了 很难在超时了
from chinadns-ng.
也可能是因为-o 10秒了 很难在超时了?
也许是吧。如果真的这样,我倒觉得你这个梯子是真的慢,5秒都没法返回查询结果。
from chinadns-ng.
哈哈,最近梯子都不是很稳了
from chinadns-ng.
依旧就这个问题继续讨论下,
这2天一直在测试,发现假如当可信DNS出现问题的时候(理解为梯子挂了),chinadns-ng进程过一会就会自动挂掉,进程不存在了都。猜测是因为超时导致的,不知道这是不是一个问题。多谢!
from chinadns-ng.
日志呢?你设置的超时多长
from chinadns-ng.
默认的超时时间5秒
我手动关闭了梯子,导致可信DNS挂掉,这样Chinadns-ng就不停的刷
ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 583
估计当时是因为msgid到顶了,直接coredump了,我猜测的,因为当时进程挂掉 我去看日志没有发现相关的记录。
from chinadns-ng.
我觉得是否可以考虑加入一个机制,来保护chinadns-ng不会coredump,因为假如客户端很多的话,可信或者国内DNS任何一个挂掉的话,会很快的将msgid刷到65535,到顶,这样进程就死了
不过修改起来是很麻烦的,同时非常感谢作者的分享。
from chinadns-ng.
可以,有时间加上,条数达到65535的时候直接拒绝服务,收到的包全部丢掉。
from chinadns-ng.
可以,有时间加上,条数达到65535的时候直接拒绝服务,收到的包全部丢掉。
多谢了!那假如达到65535后,上游的DNS之后恢复了,chinadns-ng还会继续工作吧?
from chinadns-ng.
是的
from chinadns-ng.
今天调试的时候,chinadns-ng上游仅仅断开了5分钟,我看日志msgid只到了3000多,chinadns-ng进程就自己没了(开了两个进程,其他都是默认参数)
from chinadns-ng.
你有很多客户端?你自己能大概估计这5分钟有多少dns解析请求?大概有多少
from chinadns-ng.
没有很多客户端请求,是在家里测试的,最多四个客户端。我也挺奇怪为啥msgid就到了3000多。而且也不是连续的
chinadns-ng-work$ cat chinadns-ng.log2
2020-03-30 15:56:46 INF: [main] local listen addr: 0.0.0.0#5453
2020-03-30 15:56:46 INF: [main] chinadns server#1: 211.137.58.20#53
2020-03-30 15:56:46 INF: [main] trustdns server#1: 192.168.100.253#5553
2020-03-30 15:56:46 INF: [main] ipset ip4 setname: chnroute
2020-03-30 15:56:46 INF: [main] ipset ip6 setname: chnroute6
2020-03-30 15:56:46 INF: [main] dns query timeout: 5 seconds
2020-03-30 15:56:46 INF: [main] gfwlist entries count: 5640
2020-03-30 15:56:46 INF: [main] enable repeat mode, times: 3
2020-03-30 15:56:46 INF: [main] cur judgment mode: fast mode
2020-03-30 15:56:46 INF: [main] enable SO_REUSEPORT
feature
2020-03-30 18:30:55 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 685
2020-03-30 20:06:06 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1011
2020-03-30 20:06:46 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1014
2020-03-30 20:51:08 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1160
2020-03-30 22:21:08 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1373
2020-03-30 22:45:51 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1398
2020-03-30 23:51:08 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1460
2020-03-31 02:01:58 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1577
2020-03-31 02:20:51 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1592
2020-03-31 03:40:21 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1654
2020-03-31 04:50:51 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1689
2020-03-31 05:06:07 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1703
2020-03-31 09:14:58 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 1985
2020-03-31 09:48:27 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 2090
2020-03-31 09:49:40 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 2111
2020-03-31 10:20:52 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 2256
2020-03-31 12:51:45 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 2717
2020-03-31 12:51:48 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 2724
2020-03-31 15:53:27 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 3293
2020-03-31 16:24:55 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 3400
2020-03-31 16:25:00 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 3402
2020-03-31 16:25:00 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 3403
2020-03-31 16:25:00 ERR: [handle_timeout_event] upstream dns server reply timeout, unique msgid: 3404
调试时间就在16:25分左右。
from chinadns-ng.
你做的操作就是手动把上游down了?还是
from chinadns-ng.
我也挺奇怪为啥msgid就到了3000多。而且也不是连续的
我大概说下unique_msg_id是如何计算以及做什么用的。进程启动后(unique_msg_id初始为0):
- 收到第一个query,将该query的msg_id替换为unique_msg_id当前的值(也就是0),同时记住原来的msg_id。然后unique_msg_id自增(此时值为1)。
- 收到第二个query,将该query的msg_id替换为unique_msg_id当前的值(也就是1),同时记住原来的msg_id。然后unique_msg_id自增(此时值为2)。
- 以此类推。这个unique_msg_id是从0开始自增的,数据类型是uint16_t,一共16位,超过65535后会回绕到0,继续自增,1.2.3.4.5...。unique_msg_id是hashmap的key,用来获取与之关联的query信息(用来拿到原先的msg_id以及其他信息等等)。所以不是说unique_msg_id回绕到0就会出问题,实际上出问题的情况是,hashmap中存在与之相同的unique_msg_id,这时候就会出现hash_key冲突,而uthash默认就没有执行冲突检查,所以会导致coredump。那什么时候会出现相同的unique_msg_id?显然是hashmap中的query_ctx数量达到了65535了。query_ctx删除的时机是:上游返回了,且结果已被采纳。或者是上游超时了,那么timer会自动把这个ctx删了,防止资源泄漏。
from chinadns-ng.
是的,我上游可信dns修改配置加重启进程,前后应该有5分钟左右。
from chinadns-ng.
我也挺奇怪为啥msgid就到了3000多。而且也不是连续的
我大概说下unique_msg_id是如何计算以及做什么用的。进程启动后(unique_msg_id初始为0):
- 收到第一个query,将该query的msg_id替换为unique_msg_id当前的值(也就是0),同时记住原来的msg_id。然后unique_msg_id自增(此时值为1)。
- 收到第二个query,将该query的msg_id替换为unique_msg_id当前的值(也就是1),同时记住原来的msg_id。然后unique_msg_id自增(此时值为2)。
- 以此类推。这个unique_msg_id是从0开始自增的,数据类型是uint16_t,一共16位,超过65535后会回绕到0,继续自增,1.2.3.4.5...。unique_msg_id是hashmap的key,用来获取与之关联的query信息(用来拿到原先的msg_id以及其他信息等等)。所以不是说unique_msg_id回绕到0就会出问题,实际上出问题的情况是,hashmap中存在与之相同的unique_msg_id,这时候就会出现hash_key冲突,而uthash默认就没有执行冲突检查,所以会导致coredump。那什么时候会出现相同的unique_msg_id?显然是hashmap中的query_ctx数量达到了65535了。query_ctx删除的时机是:上游返回了,且结果已被采纳。或者是上游超时了,那么timer会自动把这个ctx删了,防止资源泄漏。
多谢这么详细的回复,我消化下,那以后上游可信调试的时候,我顺便也去重启或者再运行一次chinadns-ng.再次感谢伟大作者,多谢!
from chinadns-ng.
更新再试下吧?看看是否还会出现coredump(因为看你描述不是很确定是不是这个问题)。
from chinadns-ng.
from chinadns-ng.
更新再试下吧?看看是否还会出现coredump(因为看你描述不是很确定是不是这个问题)。
好的,多谢!
from chinadns-ng.
意外发现另外一个可能的导致coredump的bug,已经改了,再更新测试下稳定性。
from chinadns-ng.
b20
from chinadns-ng.
意外发现另外一个可能的导致coredump的bug,已经改了,再更新测试下稳定性。
多谢!
之前的更新后运行到现在暂时没出现问题
from chinadns-ng.
Related Issues (20)
- --add-tagchn-ip 选项可否设置黑名单 HOT 17
- 对于不支持tcp查询的上游,请带上`udp://`限定 HOT 12
- 是否个例:域名层级问题 HOT 3
- 使用 chinadns-ng 替代 dnsmasq 时,需要注意的事项 HOT 81
- 环境有问题,DNS解析存在“污染” HOT 60
- 24.4.13版本用不了 ,是改变什么吗 HOT 3
- 增加-Dwolfssl编译不过去 HOT 7
- wolfssl 在某些平台上无法正确校验 SSL 证书 HOT 10
- tag有可能支持geosite吗 HOT 1
- 路由器上使用chinadns,一直日志里显示网络不可达 HOT 4
- 请问一下能否支持通过tcp/socks5访问上游 HOT 3
- 一点疑问 HOT 5
- oops, it's gone~ HOT 3
- trust-dns DoT Error:[Upstream.zig:822 Group.parse_failed] invalid proto: 'tls://' HOT 2
- 能同时监听多个端口吗? HOT 6
- 支持bridge协议添加到set HOT 3
- TODO HOT 5
- 能否优化下dns查询的分组机制,防止ddos。 HOT 5
- 【兼容性】对于收到的每个 query msg,都尽量进行”回复“,即使是 bad msg HOT 27
- 是否有办法对特定的局域网内某IP返回过滤掉AAAA HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from chinadns-ng.