直接执行sudo resolvectl flush-caches可一键清空systemd-resolved的本地dns缓存,前提是服务已启用且active、/etc/resolv.conf软链指向/run/systemd/resolve/stub-resolv.conf;执行后cache current entries归零,getent hosts测试响应时间恢复即生效。

直接执行 sudo resolvectl flush-caches 就能一键清空 systemd-resolved 的本地 DNS 缓存,这是当前主流 Linux(含银河麒麟 V10 SP3+)最有效、最轻量的应对方式。缓存爆满时,响应延迟升高、命中率下降,刷新后“Cache current entries”会归零,解析速度通常立即恢复。
确认 systemd-resolved 正在运行
缓存清理的前提是服务已启用且活跃。先验证状态:
- 运行 sudo systemctl is-active systemd-resolved,输出必须为 active
- 若返回 inactive 或 failed,需先启用: sudo systemctl enable --now systemd-resolved
- 再检查 ls -l /etc/resolv.conf,应指向 /run/systemd/resolve/stub-resolv.conf;否则应用可能绕过缓存
执行刷新并验证效果
命令本身不重启服务,不影响网络连接,适合线上环境快速处置:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 运行 sudo resolvectl flush-caches(注意是 resolvectl,不是已废弃的 systemd-resolve)
- 立刻查看统计:resolvectl statistics | grep "Cache current",确认数值变为 0 或显著下降
- 用真实解析行为测试:getent hosts github.com(它走 libc + systemd-resolved 链路),对比刷新前后响应时间
缓存爆满的典型表现与辅助判断
仅清缓存不够?可结合指标定位是否真由缓存引起:
- 命中率低:执行 resolvectl statistics,观察 Cache hit rate 是否长期低于 30%
- 条目数异常高:Cache current entries 持续 > 2000(默认上限约 4096),说明缓存老化机制未及时清理
- dig/nslookup 无变化? 这不是缓存没清,而是它们直连 nameserver;只要 getent 或浏览器访问变快,就说明生效了
高频场景下的组合操作建议
单刷缓存有时治标不治本,尤其在 NetworkManager 管理桌面环境时:
- 先重载配置:sudo systemctl reload NetworkManager(确保 DNS 服务器列表最新)
- 再清缓存:sudo resolvectl flush-caches
- 最后验证:cat /etc/resolv.conf | grep 127.0.0.53,确认 resolver 地址未被覆盖










