术语表/你会看到的进程

mDNSResponder

又称:Bonjour和DNS

简要回答

mDNSResponder是把每个域名转换为地址的macOS进程。它是Mac的DNS解析器,同时还运行Bonjour,无需任何设置就能找到本地网络上的打印机、隔空播放扬声器、共享的Mac和其他设备。

任何App打开网站或连接服务器时,都会向mDNSResponder询问地址。它会缓存结果,所以重复的查询是瞬间完成的。它以自己的系统账户_mdnsresponder运行,而不是以你的身份。

它的负载取决于要查询多少名称。开了很多标签页的浏览器、VPN,或有许多Bonjour设备的繁忙本地网络,都会让它有更多事要做。

mDNSResponder为什么在占用CPU

短暂的峰值来自一连串的查询:许多新标签页、某个App与许多服务器同步,或设备加入网络。持续的占用通常说明有东西在循环重试查询、VPN或DNS过滤工具工作异常,或者网络上的Bonjour广播从不停歇。

当网站用名称打不开、用地址却能打开,或者某个网站换了服务器而Mac仍然访问旧服务器时,嫌疑就在缓存上。

如何清除DNS缓存

在较新的macOS上,只需在“终端”中运行两条命令,就能清除缓存并让mDNSResponder重新载入,无需重新启动。

  1. 打开“终端”。
  2. 运行sudo dscacheutil -flushcache,并在询问时输入密码。
  3. 运行sudo killall -HUP mDNSResponder。

如何查看mDNSResponder在做什么

它以自己的系统账户运行,所以在你要求显示所有进程之前,活动监视器不会显示它。“终端”可以把它的两项工作——DNS和Bonjour——分别展示出来。

  1. 打开活动监视器,选取“显示”→“所有进程”,然后在搜索栏中输入mdns。你会看到_mdnsresponder账户下的mDNSResponder,以及root下的mDNSResponderHelper。
  2. 观察“CPU”标签页中的“% CPU”和“网络”标签页中的包数量列。短暂的峰值是正常的。如果你没在上网,它却一直有稳定的负载,就值得看一看。
  3. 要查看Mac正在使用哪些DNS服务器,打开“终端”并运行scutil --dns。resolver #1在nameserver[0]、nameserver[1]等条目下列出了大多数查询所用的服务器。
  4. 要通过mDNSResponder本身测试一次查询,运行dns-sd -G v4v6 apple.com。它会在每个地址返回时将其显示出来。按下Control-C停止。
  5. 要查看Bonjour在你的网络上发现了什么,运行dns-sd -B _services._dns-sd._udp local.。它会列出你周围的设备所广播的服务类型,例如打印机的_airplay和_ipp。按下Control-C停止。

mDNSResponder的正常占用与异常情况

正常:接近零,在你打开很多标签页、加入网络,或网络中的某台设备被唤醒时,会有短暂的峰值。

值得检查:连续几小时稳定占用CPU或网络,或者某些名称在一个网络上解析失败,在另一个网络上却正常。常见原因有:

  • VPN或DNS过滤工具添加了自己的解析器,并不断更改它们。当VPN把某些名称交给自己的服务器解析时,scutil --dns会显示带有domain行的额外解析器。
  • 某个App或脚本在紧密循环中查询名称,常见的是不断重试一台连不上的服务器。
  • 繁忙的本地网络,例如办公室或共享的楼宇,许多设备都在通过Bonjour广播自己。
  • 网络分配的DNS服务器很慢或不响应,于是查询只能等待并重试。

DNS和Bonjour:两项工作

互联网上的名称(例如apple.com)会发给你的网络或你自己设置的DNS服务器。以.local结尾的名称(例如你的Mac自己的网络名称)则从不离开本地网络:mDNSResponder会直接询问周围的设备,这就是多播DNS,也是它名字中那个m的由来。

所以scutil --dns会列出标记为mdns的local解析器。如果在家里能通过.local名称访问打印机或共享的Mac,在公司却不行,说明是公司网络屏蔽了这些本地广播,而不是互联网的问题。

常见问题

Mac上的mDNSResponder是什么?

它是为每个App把域名解析为地址的macOS进程,还运行Bonjour,用来查找你网络上的打印机、隔空播放扬声器和其他设备。

可以退出mDNSResponder吗?

macOS会立刻重新启动它,而在它不在的这段时间里,什么都查不到网站地址。要清除错误的结果,请清除DNS缓存,而不是退出它。

mDNSResponder为什么要接受传入连接?

Bonjour会监听本地网络上其他设备的自我广播。macOS的防火墙默认允许它;如果你的防火墙询问,允许它就能让隔空播放、打印机发现和屏幕共享正常工作。

mDNSResponder安全吗?

安全。它是macOS的一部分,由Apple签名,位于/usr/sbin/mDNSResponder。它以自己受限的系统账户运行,既不是以你的身份,也不是以root运行。

mDNSResponderHelper是什么?

它是mDNSResponder的一个小搭档,以root运行,负责处理受限账户自己做不了的少数几项任务。它是macOS的一部分,平时处于闲置状态。

相关条目

想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。