Mac で mDNSResponder の CPU 使用率が高いのはなぜ?
mDNSResponder は、すべてのアプリの DNS 検索に応答し、Bonjour を通じてローカルネットワーク上の機器を見つける macOS のプロセスです。システムの正常な一部で、/usr/sbin/mDNSResponder から専用の _mdnsresponder アカウントで動作し、問題のない Mac では CPU 使用率がほぼ 0% のままです。高いまま続くときは、たいていブラウザ、VPN、混み合ったネットワークなど別の何かのために働いているので、プロセスを止めるのではなく、その原因を探すのが対処になります。
何をしているのか
マニュアルページ(man mDNSResponder)では、Multicast DNS と DNS Service Discovery を実装し、ほかのプロセスに代わって DNS 問い合わせを行い、その答えをキャッシュするデーモンと説明されています。アクティビティモニタやネットワーク系のツールでこの名前をよく見かけるのはそのためで、アプリがアドレスを尋ねるとき、実際に尋ねているのがこのプロセスです。
もう一つ、mDNSResponderHelper というプロセスが root 権限で並んで動いています。このページに使った Mac では、アイドル中は次のように見えました。
_mdnsresponder 0.0% CPU /usr/sbin/mDNSResponder
root 0.0% CPU /usr/sbin/mDNSResponderHelper
原因を探す
アクティビティモニタを開いて CPU タブで mDNSResponder を 1 分ほど見てください。短いスパイクは正常です。高いまま続くなら、一度に一つずつ変えて確かめます。
- 多くの接続を開くブラウザやアプリを終了し、1 分以内に数値が下がるか確認します。
- VPN、プロキシ、DNS フィルタがあればオフにします。これらはすべての名前解決の経路を変えるためです。
- スマートフォンのテザリングなど、別のネットワークに接続します。負荷が消えるなら、原因は元のネットワークにあります。
- ネットワークが何を告知しているかは、次のコマンドを数秒実行し、
Ctrl + Cで止めると見られます。
dns-sd -B _services._dns-sd._udp local
長くて絶えず入れ替わるリストが出るなら、Bonjour 機器が多いネットワークです。
| 見えるもの | 考えられる原因 | 試すこと |
|---|---|---|
| ブラウザやアプリを開いたときのスパイク | 通常の名前解決 | 何もしない |
| VPN やプロキシをオンにしたときだけ CPU が高い | その DNS 設定やフィルタ | 更新するか、DNS 設定を確認する |
| 特定のネットワークでだけ CPU が高い | Bonjour 機器が多い、または不調 | 別のネットワークで試し、ルーターや疑わしい機器を再起動する |
| サイトが開かない、または古いアドレスが出る | 古い、または誤った DNS の応答 | DNS キャッシュをフラッシュする |
| この名前でデータ使用量が多い | 名前解決とローカル探索 | どのアプリがネットワークを使っているかを見る |
再起動しても安全か
DNS キャッシュのフラッシュはプロセスにシグナルを送る操作で、キャッシュを消す正式な方法です。
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
一瞬で終わり、パスワードが必要です。Mac を再起動しても同じ効果があります。フラッシュが効くのは誤った応答や古い応答のときだけなので、アプリが問い合わせ続けているせいで忙しいなら、負荷は戻ってきます。
マルウェアではないか
本物のファイルはシステムボリュームの /usr/sbin/mDNSResponder にあり、macOS は /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist から起動します。実行中のものを確かめるには、アクティビティモニタのインスペクタでパスを見るか、次を実行します。
ps -axo user,pid,args | grep '[m]DNSResponder'
ホームフォルダや /tmp など、別のフォルダから動いている同名のプロセスは疑ってください。パスが正しいことは有力な証拠ですが、どのアプリが問い合わせを起こしているかまでは分かりません。
やってはいけないこと
- 無効化しようとしないでください。この起動デーモンはシステム整合性保護で守られており、このプロセスがないと Mac 全体で名前解決が止まります。
-HUPの代わりにkill -9を使わないでください。Apple のアーカイブされたサポート記事が挙げているのは-HUPの形です。- データ使用量の多さをダウンロードと考えないでください。通信は名前解決と探索で、ほかのアプリの動作が原因です。
- これを理由に「ネットワークブースター」や DNS クリーナーを入れないでください。どちらも、何が問い合わせているかは教えてくれません。
Mole でできること
Mole の ステータス では、mDNSResponder が忙しいときに CPU とメモリが一覧に出ます。忙しくないときも、表の検索で見つかります。メニューの なぜ実行中? では、実行ファイルと起動元が分かります。macOS はこのシステムアカウントのポートを Mole に読ませないため、ポートの一覧は出ません。システムのネットワークサービスなので、Mole には止める手段もありません。Mole Mac は DNS キャッシュをフラッシュせず、DNS やネットワーク設定も変えないので、それには上のターミナルのコマンドを使ってください。メニューバーのネットワーク速度をクリックして開く、アプリごとの ネットワーク リストにも表示され、名前解決とアプリ本来の通信を見分けるのに役立ちます。
よくある質問
Mac の mDNSResponder とは何ですか?
アプリのために DNS 検索を行い、Bonjour を通じてローカルネットワーク上の機器を見つけるシステムプロセスです。/usr/sbin/mDNSResponder から動作します。
mDNSResponder の CPU 使用率が高いのはなぜですか?
たいていは、アプリ、VPN や DNS フィルタ、混み合ったネットワークなど、何かが大量の名前解決や探索をさせています。一つずつ変えながら数値を見てください。
mDNSResponder を終了または無効化できますか?
無効化しないでください。Mac 全体の名前解決がこれに依存しています。誤った応答を消したいときは、-HUP のコマンドで DNS キャッシュをフラッシュします。
mDNSResponder はウイルスですか?
本物は /usr/sbin から動き、システムの起動デーモンから始まります。ほかのフォルダから動くコピーは、よく調べる価値があります。
mDNSResponder がネットワークへのアクセスを求めたりデータを使ったりするのはなぜですか?
役割がネットワークの名前解決とローカル探索なので、常にネットワークを使います。データ量はほかのアプリの要求を反映したもので、通常は小さい値です。