+time 与 +tries 控制什么
dig 对每个服务器默认等 5 秒超时、最多重试 2 次:一台不回应的 DNS 会让用户体感到「解析卡 5 秒」甚至更久。+time 改单次等待秒数,+tries 改重试次数,两者相乘决定最坏情况下的总等待。排查解析偶发卡顿时,先把参数收紧让失败快速暴露,再逐台服务器测试,就能看出是哪一台在拖后腿。
基本信息
| 命令 | dig(BIND 9 工具集,Linux/macOS 可用) |
|---|---|
| 默认行为 | +time=5 +tries=2,失败后换下一个服务器 |
| 总耗时上界 | time × (tries + 1) 量级,多个服务器时叠加 |
| 相关配置 | /etc/resolv.conf 的 options timeout:N attempts:M(glibc 解析器) |
| 权限要求 | 普通用户即可 |
典型使用场景
- 应用报「偶发卡 5 秒」:用 +time=2 +tries=1 复现并在日志里看到超时
- 逐台验证内网 DNS:分别指定 @服务器,比较哪台异常
- 脚本里做健康探测:需要快速失败而不是等满 5 秒
- 核对 SERVFAIL 与超时的区别:+tries=1 减少重试造成的干扰
- 配合 +search 验证短名补全在设备命名环境中是否生效
超时控制与逐服务器测试
超时控制与逐服务器测试
dig +time=2 +tries=1 example.com # 快速失败,便于脚本化探测
dig +time=2 +tries=1 @10.0.0.53 example.com # 逐台测内网 DNS,超时的一目了然
dig +time=3 +tries=1 @8.8.8.8 example.com # 与公网 DNS 对照
dig +search +time=3 host1 # 启用 search 域补全,验证设备短名
dig +time=1 +tries=1 +stats example.com # 带上统计信息,看 Query time 数值
# 观察 status 字段:NOERROR / NXDOMAIN / SERVFAIL / 超时(no servers could be reached)结果判读
| 现象 | 含义 | 下一步 |
|---|---|---|
| Query time 稳定偏大 | 服务器本身慢或链路远 | 换就近服务器,对比多个上游 |
| no servers could be reached | 全部服务器无响应 | 查网络可达性与 53 端口是否被拦 |
| SERVFAIL | 服务器有响应但解析失败 | 查上游转发与区域配置 |
| NXDOMAIN | 域名不存在 | 确认拼写与是否该走 search 域 |
| 首次慢后续正常 | 缓存未命中或走了一次冷启动 | 对比第一次与第二次的 Query time |
glibc 解析器默认 timeout 5 秒、attempts=2,与 dig 的默认值取向一致;应用层「超时 10 秒」的体感异常常常来自这里,而不是应用自身逻辑。
排查期间连续采样更有价值:同一域名连查 10 次并记录 Query time,能区分「一直慢」与「偶发卡」,两者的根因完全不同。