跳到主要内容

这里是 Mole Mac 官网,要去 Windows 版官网吗?

立即跳转
Mole
MacWindows
功能 实测 口碑 定价 常见问题 博客
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES
立即购买购买 下载

    帮助、文档、更新日志和文章

    博客

    Mac 怎么清除 DNS 缓存

    应用与维护发布于 2026年10月11日更新于 2026年10月17日约 4 分钟

    Mac 清除 DNS 缓存,从应用程序 › 实用工具打开终端,运行下面这一行:

    sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
    

    按提示输入登录 Mac 的密码,成功时不会有任何输出;重启 Mac 也能清掉缓存,Apple 关于 DNS 缓存的文章里就写着,可以重新启动 Mac 来更新缓存的信息。

    这篇 Apple 文章已经归档,不再更新,里面最新的一条是给 OS X Yosemite 10.10.4 及更高版本的 sudo killall -HUP mDNSResponder,dscacheutil -flushcache 则是它列给 Snow Leopard 的命令。Apple 之后没有发过新版说明,所以上面那一行两条都跑:killall 那半句是 Apple 给当前系统列的做法,dscacheutil -flushcache 按它的手册页(man dscacheutil)是清空目录服务缓存,手册还说只该在极端情况下用,DNS 记录过期正好算一种。Mole Mac 不做清除 DNS 缓存这件事,这是终端里的操作。

    DNS 缓存是什么

    App 要连 example.com 时,macOS 得先把名字换成 IP 地址,在 Mac 上,这一步交给 mDNSResponder,它的手册页(man mDNSResponder)说,它替其他进程发 DNS 查询,并保存一份答复的缓存。

    有了缓存,重复查同一个名字就省掉一来一回,每条答复按域名 DNS 记录允许的时长保留,到期再重新查。大多数时候这一切没人察觉,出问题是在缓存里的答案还没到期就已经过时了:网站搬到了新服务器,你换了 DNS 服务器,或者某次查询失败了,这个失败结果还在被反复使用。

    killall -HUP mDNSResponder 里的 -HUP 是选 killall 发哪个信号,不加的话 killall 默认发 TERM(man killall),Apple 列出的重置 DNS 缓存的写法就是 HUP 这一种,所以别省掉这个参数,也别换成 -9。

    什么时候清 DNS 缓存有用

    情况 为什么有用
    网站或服务器换了地址,你的 Mac 还连到旧地址 缓存里的答案还没过期
    你在网络设置里换了 DNS 服务器 之前那台服务器给的答案还留在缓存里
    改了 /etc/hosts,却没生效 hosts 手册页说这个文件由 mDNSResponder 读取,它手里可能还是之前的答案
    一分钟前某个网站解析失败,别的设备能打开,这台 Mac 还是失败 失败的查询结果可能被缓存了

    什么时候清了也没用

    清缓存只清 Mac 自己解析器里的缓存,下面几种常见情况跟它无关:

    • 代理:流量走 HTTP 或 SOCKS 代理时,名字常常由代理自己解析,用 scutil --proxy 可以看当前的系统代理配置。
    • VPN:VPN 可能装上自己的 DNS 服务器,或者只把部分域名交给它们解析,scutil --dns 会列出所有在用的解析器,带域名的补充解析器只负责那个域名,公司内网域名打不开时,要查的是 VPN 的 DNS。
    • 浏览器自己的缓存:浏览器可能留着自己的短期 DNS 结果,还会复用已经打开的连接,清完之后把浏览器彻底退出再打开,光刷新标签页不够。
    • 上游缓存:路由器和 DNS 服务商也会缓存答案,清 Mac 的缓存没法让它们早点去取新记录。
    • 网站本身挂了,或者在你的网络里被拦了,换一个网络的其他设备也打不开,原因就不在这台 Mac 的 DNS 上。

    如果只是网页加载慢、不是打不开,DNS 缓存很少是瓶颈,更可能的原因见Mac WiFi 卡顿和哪个 App 在用 Mac 的网络。

    看看 Mac 实际解析出了什么

    用系统解析器查,得到的是 App 拿到的那个答案:

    dscacheutil -q host -a name example.com
    

    dscacheutil 手册页说,-q 通过标准调用发起查询,结果要么来自缓存,要么现取。

    再直接问 DNS 服务器:

    dig example.com
    

    dig 不经过 macOS 的解析器,它的手册页说它用 /etc/resolv.conf 里列的服务器,而 macOS 上这个文件开头就写着,系统里大多数进程做 DNS 解析时并不读它。所以 dig 给出新地址、dscacheutil 还是旧地址,差别就出在 Mac 的缓存或解析器配置上,清一次缓存应该就好;两边都是旧地址,说明上游的记录还没变过来。

    看 Mac 正在用哪些 DNS 服务器:

    scutil --dns
    

    手动设置的服务器在系统设置 › 网络里,选中一个网络服务,点详细信息,再点 DNS(Apple)。

    怪缓存之前,先看 /etc/hosts

    /etc/hosts 里写了的名字会绕过 DNS,开发工具、广告拦截工具和一些老教程会往里加几行,然后就忘在那里了,查看它:

    cat /etc/hosts
    

    正常的文件只有几行 localhost 和以 # 开头的注释,如果里面出现了那个出问题的域名,它为什么解析成那样就清楚了。只改那一行,用 sudo 运行编辑器,改之前留一份原文件,改完再清一次缓存,localhost 那几行别删。

    确认结果

    1. 运行清缓存的命令。
    2. 对出问题的域名再跑一次 dscacheutil -q host -a name example.com,看地址对不对。
    3. 把出问题的浏览器或 App 退出再打开。
    4. 还不行,就对照 dig、scutil --dns 和 scutil --proxy,看到底是哪一层在回答。

    不要这样做

    • 不要定时清 DNS 缓存,也别把它当提速技巧,缓存热着查询更快,清空后头几次反而更慢。
    • 不要删 /etc/hosts,也不要改它的权限。
    • 用着 VPN 或管理描述文件的公司、学校 Mac,不要自己换 DNS 服务器,先问管理的人,内网名字可能就解析不了了。
    • 不要为了「测试 DNS」去改代理或 VPN 设置,先弄清是哪一层在回答。

    常见问题

    Mac 怎么清除 DNS 缓存?

    在终端运行 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder,输入密码就行,重启 Mac 也能清掉。

    现在的 macOS 清 DNS 缓存用什么命令?

    Apple 已归档的文章给 OS X 10.10.4 及更高版本列的是 sudo killall -HUP mDNSResponder,之后没有发新的说明,前面再加一句 sudo dscacheutil -flushcache 是常见写法,清掉的只是缓存数据。

    清 Mac 的 DNS 缓存会顺带清浏览器缓存吗?

    不会,它只清 macOS 解析器的缓存,浏览器要退出再打开,才不会继续用它自己的 DNS 结果和已经打开的连接。

    清完缓存,网站为什么还是去旧地址?

    查一下 /etc/hosts、代理或 VPN,再看 dig 有没有拿到新地址,上游的 DNS 记录还没变的话,本地怎么清都没用。

    Mole 能清 DNS 缓存吗?

    不能,Mole Mac 没有清除 DNS 缓存的功能,用上面的终端命令,或者重启 Mac。

    Mac 空间不够、越用越慢时,Mole 能帮你清理垃圾、卸干净软件、维护系统。

    下载试用 Mole

    继续阅读

    • 应用与维护Mac 到底需不需要清理软件约 3 分钟
    • 应用与维护卖 Mac 之前怎么恢复出厂设置约 5 分钟
    • 应用与维护Mac 安全模式:怎么进入,结果怎么看约 5 分钟

    Mole · 鼴

    清理 Mac,管理软件,查看运行状态

    v1.17.0 (332) · 更新日志

    产品

    Mac 清理 App 卸载 Mac 优化 磁盘分析 系统监控

    支持

    帮助 功能文档 更新日志 博客

    法律

    服务条款 隐私政策 退款政策

    资源

    Windows 版 命令行工具 推广联盟

    联系

    Twitter hi@mole.fit

    Mole 唯一官网 mole.fit · 请勿下载来源不明的安装包

    命令行版继续免费开源。