Mac で mds / mdworker の高 CPU を直す
mds、mds_stores、mdworker という名前のプロセスは、Spotlight のメタデータと
検索インデックスに属しています。アップデート、移行、復元、大量のファイル変更の直後に
負荷が上がるのは普通ですが、mdutil -s だけでは再構築が進行中かどうかは分からず、
決まった 1 時間といった所要時間もありません。再構築やデータの除外に進む前に、
きっかけと進捗を見極めてください。
mds と mdworker とは
これらは Spotlight のインデックスエンジンです。mds(メタデータサーバ)が インデックスを統括し、mds_stores がデータベースを管理し、mdworker プロセスが ファイルを実際に走査して、内容とメタデータを検索可能にします。インデックスが最新なら アイドルのままです。インデックスが古くなると起動し、ファイルを処理していきます。 それが画面上の CPU 使用です。
なぜ急に負荷が上がるか
ファイルが一度に大量に変わると、Spotlight は再インデックスします。
- macOS のアップデートや移行の直後、ディスクの大きな範囲が新しくなったとき。
- 大量データの移動やコピーのあと、ファイルの復元やドライブのクローンなど。
- まだインデックスされていない外部ボリュームやネットワークボリュームを接続したとき。
- ファイルが急速に変わるフォルダがあるとき、大きなダウンロードが終わったときなど。
インデックスが有効かどうかは次で確認します。
mdutil -s /
「Indexing enabled」は通常の状態であり、進捗の報告ではありません。mdworker の
持続的な CPU 使用を、アクティビティモニタのディスク活動や最近のファイル変更と突き合わせてください。
処理が進んでいるなら、電源を入れたまま終わらせましょう。大きなソースツリー、
メールストア、外部ボリューム、遅いストレージ、同期の繰り返しは、所要時間を長くします。
落ち着かないとき
活動が一向に収まらないときは、まずファイルを書き換え続けているアプリを止め、 疑わしい外部ボリュームを 1 つ外します。システム設定 > Spotlight > 検索のプライバシーでフォルダを除外すると、インデックス負荷は下がりますが、 そのフォルダの Spotlight 結果は失われます。生成されたビルドツリー、仮想ディスク、 本当に検索しないアーカイブ向けに使い、ホームや起動ディスクをまとめて除外する手段にはしないでください。
検索結果が欠けている、またはインデックスが明らかに詰まっているときは、Apple の手順どおり、 同じプライバシーリスト経由で再構築します。対象のディスクやフォルダを追加し、少し待ってから 外します。現行の Spotlight 再構築ガイドでは、ボタン名は macOS の バージョンによって 検索のプライバシー または Spotlight のプライバシー と 表記されます。リストから外すと、Spotlight はその項目を再びインデックスします。 再構築は意図的に重い作業を繰り返すため、修理手順であり、日常的な CPU 活動への 最初の対応ではありません。
仕組み:インデックスと、再構築が走る条件
Spotlight は逆引きインデックス、つまり単語やメタデータからそれを含むファイルへの対応表を、
各ボリューム上の隠し .Spotlight-V100 ストアに保持しています。ファイルが変わると、
カーネルの FSEvents が mds に通知し、mds がファイルを mdworker に渡し、mdworker が
そのファイル種別用のインポータプラグイン(.mdimporter)を読み込んでテキストと
メタデータを取り出します。通常の編集は軽い処理です。フル再構築は、対象ファイルを
すべて再インポートするため重いです。一部のアップデート、移行、復元はかなりの再インデックスを
引き起こしますが、範囲は状況によります。プライバシー除外は、そのサブツリーの検索を
諦めることでしか作業量を減らせません。だから除外は狭く、意図的にすべきです。
モニタが役立つところ
アクティビティモニタや Mole の Status 表示で、CPU とディスクの主因が Spotlight か 判別できます。難しいのは、その仕事が有限な変更によるものか、変わり続けるディレクトリによるものか、 という点です。最近の活動と、段階的な切り分けで答えは出ます。ワーカーを強制終了しても解決しません。
再現可能な診断
インデックスが有効であることを確認し、CPU をディスク活動と最近のファイル変更と突き合わせ、 進捗が妥当なら待ちます。活動が続くときは、繰り返し変わるフォルダやボリュームを切り分けます。 検索不要なデータだけを除外し、結果やインデックスの挙動が必要性を示すときだけ、 検索のプライバシー経由で再構築します。クリーンアップ手段としてワーカーを kill しないでください。