首页/系统/Linux 内核与性能调优速查/dig 解析耗时与解析器对比
网络栈调优98 条

dig 解析耗时与解析器对比

解析延迟影响新建连接时间; 用 dig 的 Query time 对比不同解析器的响应表现。

dig 解析耗时与解析器对比

DNS 解析耗时直接影响新建连接的速度,也是不少「首次访问慢、之后正常」问题的根因。dig 输出的 Query time 给出单次查询的耗时,用同一个域名对比不同解析器,可以判断延迟来自本地转发链路还是上游解析器本身。

基本信息

基本查询dig +stats example.com @8.8.8.8
只看结果dig +short example.com
强制 TCPdig +tcp +stats example.com
关注行SERVER 行与 Query time 行
前置确认本机是否经本地缓存或 systemd-resolved 转发

典型使用场景

  • 新建连接耗时偏高,确认解析环节是否拖慢
  • 对比多个解析器的响应表现,为选型提供依据
  • 排查解析超时导致的间歇性访问失败
  • 验证不存在的域名是否快速返回而不是长时间等待
  • 对比 TCP 与 UDP 查询的差异,判断是否走了回退

查询与对比

查询与对比
dig +stats example.com @8.8.8.8        # 指定解析器并输出耗时
dig +short example.com                 # 只看解析结果
dig +tcp +stats example.com            # 强制 TCP 查询,观察差异
for s in 8.8.8.8 1.1.1.1; do dig +stats example.com @$s | grep -E 'SERVER|Query time'; done  # 横向对比

输出判读

输出项含义判读
SERVER实际应答的解析器地址确认查询是否被转发
Query time本次查询耗时(毫秒)需多次采样后看稳定值
ANSWER SECTION返回的记录内容核对是否命中预期记录
status应答状态码SERVFAIL 说明解析侧有问题
flags应答标志关注是否被截断或需重试

判读注意

  • 先确认本机是否经本地缓存转发,否则对比的是转发链路而非远端解析器
  • 同一域名对比多个解析器,避免本地缓存造成的偏差
  • 单次查询受缓存命中状态影响,需要多次采样
  • 把解析耗时与连接建立耗时放在一起看,才能定位完整瓶颈
查询结果被缓存时分母不同:命中缓存与回源查询的耗时差异很大,比较解析器质量时要固定条件,例如都查同一个不存在或未缓存的域名。
TCP 回退与高延迟同时出现时,通常指向应答被截断或链路丢包,而不是解析器本身慢,需要结合链路质量一起判断。

易错点

  • 忽略本地缓存与转发链路,把耗时全部归因到远端解析器
  • 单次查询就下结论,未考虑缓存命中状态带来的巨大差异
  • 只看解析耗时不看连接建立耗时,定位不到真正的瓶颈环节
  • 在不同条件下对比不同解析器,结论不可比

数据来源与参考

  • man dig
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌