# Mac 上的 mDNSResponder 为什么占这么多 CPU

> mDNSResponder 替所有 App 处理 DNS 和 Bonjour，怎么找到是谁让它一直忙，怎么安全地清缓存，以及怎么确认它是真的。

Published: 2026-11-09

mDNSResponder 是 macOS 里替所有 App 查 DNS、再通过 Bonjour 找局域网设备的进程，它是系统的正常部分，从 `/usr/sbin/mDNSResponder` 运行，用的是自己的 `_mdnsresponder` 账户，健康的 Mac 上 CPU 接近 0%。它一直很忙时，通常是在替别的东西干活，比如浏览器、VPN 或者设备很多的网络，要找的是这个来源，不是把进程停掉。

## 它是干什么的

手册页（`man mDNSResponder`）说它是实现多播 DNS 和 DNS 服务发现的守护进程，替其他进程发起 DNS 查询，并把结果缓存下来，所以这个名字经常出现在活动监视器和网络工具里，App 要查地址，实际去问的就是它。

旁边还有一个以 root 运行的 `mDNSResponderHelper`，写这篇时用的这台 Mac，空闲时两个进程是这样的：

```text
_mdnsresponder  0.0% CPU  /usr/sbin/mDNSResponder
root            0.0% CPU  /usr/sbin/mDNSResponderHelper
```

## 找到是谁在推高它

打开活动监视器的“CPU”标签页，看一分钟 `mDNSResponder`，短暂的尖峰是正常的，一直很高就一次只改一件事：

1. 退出浏览器和会开很多连接的 App，看数字是否在一分钟内回落。
2. 关掉 VPN、代理或 DNS 过滤工具，它们会改变每次查询的路线。
3. 换一个网络，比如手机热点，负载消失的话，原因就在原来的网络上。
4. 想看网络里有哪些服务在广播，运行下面这条几秒钟，再按 `Ctrl + C` 停止：

```bash
dns-sd -B _services._dns-sd._udp local
```

列表很长而且一直在变，说明这个网络里的 Bonjour 设备很多。

| 看到的情况 | 可能的原因 | 怎么试 |
| --- | --- | --- |
| 打开浏览器或 App 时短暂升高 | 正常查询 | 不用管 |
| 只有开着 VPN 或代理时才高 | 它的 DNS 设置或过滤规则 | 更新它，或者检查它的 DNS 设置 |
| 只在某个网络里才高 | Bonjour 设备很多或者有设备异常 | 换网络对比，再重启路由器或可疑设备 |
| 网站打不开或者还是旧地址 | DNS 结果过期或不对 | [清除 DNS 缓存](https://mole.fit/zh/blog/how-to-flush-dns-cache-mac) |
| 它名下的流量很高 | 查询和局域网发现 | 看 [哪个 App 在用网络](https://mole.fit/zh/blog/what-app-is-using-my-network-mac) |

## 可以重启它吗

清 DNS 缓存就是给这个进程发一个信号，这是清缓存的正规做法：

```bash
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
```

一下就好，需要输入密码，重启 Mac 也能达到同样效果。这只对错误或过期的结果有用，如果是 App 一直在问，负载还会回来。

## 它是恶意软件吗

真正的文件在系统卷的 `/usr/sbin/mDNSResponder`，由 `/System/Library/LaunchDaemons/com.apple.mDNSResponder.plist` 启动，可以在活动监视器的检查器里看路径，或者运行：

```bash
ps -axo user,pid,args | grep '[m]DNSResponder'
```

如果同名进程从别的文件夹运行，比如个人文件夹或 `/tmp`，就要留心了。路径正确是不错的证据，但它说明不了是哪个 App 在发起查询。

## 不要这样做

- 不要想办法禁用它，这个启动守护程序受系统完整性保护，没有它整台 Mac 的域名查询都会失效。
- 不要用 `kill -9` 代替 `-HUP`，苹果已归档的支持文章列的就是 `-HUP` 这种写法。
- 不要把高流量当成在下载东西，那是查询和局域网发现，真正的来源是其他 App 的活动。
- 不要因为它去装“网络加速”或 DNS 清理工具，它们都告诉不了你是谁在问。

## Mole 能做什么

在 [Mole](https://mole.fit/zh/) 的“状态”里，`mDNSResponder` 忙的时候会列出 CPU 和内存，不忙时用表格的搜索也能找到。菜单里的“为什么在运行？”会列出可执行文件和由谁启动，这个进程属于系统账户，Mole 读不到它的端口，所以不会显示端口。它是系统网络服务，所以 Mole 不提供停止它的办法。Mole Mac 不清 DNS 缓存，也不改 DNS 和网络设置，这件事用上面的终端命令。点菜单栏的网络速率打开的“网络”列表里也可能出现它，方便区分查询和 App 真正的流量。

## 常见问题

### Mac 上的 mDNSResponder 是什么？

它是替 App 做 DNS 查询、通过 Bonjour 找局域网设备的系统进程，从 `/usr/sbin/mDNSResponder` 运行。

### mDNSResponder 为什么占这么多 CPU？

通常是有东西让它做大量查询或发现，比如某个 App、VPN、DNS 过滤工具或者设备很多的网络，一次改一件事，看数字有没有变。

### 可以退出或禁用 mDNSResponder 吗？

不要禁用，整台 Mac 的域名查询都靠它，想清掉错误结果，用带 `-HUP` 的命令清 DNS 缓存。

### mDNSResponder 是病毒吗？

真正的进程从 `/usr/sbin` 运行，由系统启动守护程序启动，从其他文件夹运行的副本才需要仔细看。

### mDNSResponder 为什么要联网、还用流量？

它的工作就是网络查询和局域网发现，所以一直在用网络，流量多少取决于其他 App 在问什么，通常很小。

---

Canonical HTML page: https://mole.fit/zh/blog/mdnsresponder-high-cpu-mac
Blog index for agents: https://mole.fit/zh/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
