macOSでmediaanalysisdがCPUを圧迫するのを防ぐ方法

macOSでmediaanalysisdがCPUを圧迫するのを防ぐ方法

macOSで写真をスキャンする際に、バックグラウンドプロセス「mediaanalysisd」がCPU使用率を過剰に高めるという報告が複数寄せられています。mediaanalysisdとは何か、どのような機能を果たすのか、そして停止させる方法について解説します。

過去1年間、インターネット上ではAppleがユーザーのフォトライブラリを密かに分析し、法執行機関に提出しているかどうかが議論されてきました。しかし、独立機関による検証の結果、Appleがそのような分析を行っていないことは疑いの余地なく証明されました。

しかし、mediaanalysisdのCPU使用率が高いことが様々な情報源から報告されています。このバックグラウンド処理はMacのCPUに負荷をかけ、マシンの速度を様々な程度まで低下させる可能性があります。Appleからの報告がない場合でも、mediaanalysisdは顔認識やSpotlightのインデックス作成といったAI用途のために写真ライブラリをスキャンしているだけです。

いずれにしても、CPU の過度の使用を防ぐために mediaanalysisd を無効にすることをお勧めします。

そのためには、まず macOS のシステム整合性保護 (SIP) を無効にする必要があります。

macOSでシステム整合性保護を無効にする方法

macOS で SIP を無効にするには、Apple の SIP ページの指示に従ってください。

Appleは、システム整合性保護の無効化は一時的なものにとどめ、無効化後はできるだけ早く再有効化するよう警告しています。また、システム整合性保護によりコンピュータが「悪意のあるコードに対して脆弱になる」可能性があるとも述べています。

SIP を無効にするには、Mac をリカバリモードで再起動し、ターミナルに以下を入力します。

csrutil disable

LaunchAgentsディレクトリ自体の権限を変更してロックを解除する必要がある場合があります。ただし、完了したら権限を元の状態に戻すことを忘れないでください。BatchModなどのサードパーティ製ユーティリティを使用して、権限を元に戻すことができます。

フォルダのユーザーまたはグループの権限は変更せず、-rxw権限のみを変更してください。完了したら、必ず元の状態に戻してください。

次に、ターミナルで次のように入力 して、 /System/ Library/LaunchAgents/com.apple.mediaanalysisd.plist を削除します。

sudo rm -R /System/Library/LaunchAgents/com.apple.mediaanalysisd.plist

そしてReturnキーを押します。

次に、Mac を再起動します。

Appleのcom.apple.mediaanalysisd.plistは、Launch Servicesデーモンのローダーファイルで、macOSにmediaanalysisdバイナリの場所と起動方法を指示します。com.apple.mediaanalysisd.plistを削除すると、macOSは起動時または断続的にmediaanalysisdバイナリを起動しなくなります。

macOS が .plist ファイルを自動生成する場合は、ファイルを直接編集してcom.apple.mediaanalysisd.photos設定をNOに設定する必要があります。デフォルトはYESです。

このファイルを編集すると、Mac の動作が変わったり、一部が機能しなくなったりする可能性があるため、自己責任で行ってください。

com.apple.mediaanalysisd.realtime の値を YES から NO に変更してみるのも良いかもしれません。実際、Homekit の2つの設定を除くすべての MachServices 設定を無効にしてみるのも良いでしょう。ただし、これらの設定がそれぞれどのような機能を果たすのかは現時点では明確ではありません。

ただし、繰り返しになりますが、これらの設定を変更すると、Spotlight のインデックス作成や写真およびプレビューでのテキスト選択など、一部の macOS 機能が無効になることに注意してください。

EnableTransactions設定を試してみてもいいかもしれませんが、この値がデーモンにネットワーク トランザクションを使用するように指示するものかどうかはまだ明らかではありません。

Appleのplistファイルは単なるXMLファイルです。そのため、XMLの知識があれば、任意のテキストエディタやAppleのXcode開発ツールを使って変更することができます。

Xcode で .plist ファイルを編集する場合、XML を中央の列にデータ型といくつかの型のプリセットを含む編集可能なフィールドのテーブルに変換する組み込みエディターが提供されます。

.plistは、macOSのディスク上の実際のデーモンバイナリの保存場所についても手がかりを与えてくれます。「ProgramArguments」フィールドの「Item 0」には、次のような値があります。

/System/Library/PrivateFrameworks/MediaAnalysis.framework/Versions/A/mediaanalysisd

mediaanalysisd バイナリ自体は MediaAnalysis.framework バンドル内に存在します。このバンドルを無効化するとどのような影響が出るかは不明ですが、このフレームワークをシステムから削除した場合の影響はまだ確定していないため、ご自身の責任で行ってください。

.plist の LaunchEvents を覗いてみる

.plistファイルのLaunchEvents->com.apple.xpc.activity辞書を調べてみると、さらに興味深い項目がいくつか見つかります。実際、この辞書には5つの写真分析項目が含まれています。

  1. com.apple.mediaanalysisd.photosanalysis
  2. com.apple.mediaanalysisd.photos.visualsearch
  3. com.apple.mediaanalysisd.photos.face
  4. com.apple.mediaanalysisd.photos.メンテナンス
  5. com.apple.mediaanalysisd.photos.ocr

XPC (IPC と呼ばれることもあります) は、アプリケーションがネットワーク経由を含む XPC サービスを通じて相互に通信できるようにする Apple のプロセス間通信テクノロジーです。

com.apple.mediaanalysisd.photos.ocr タスクは、選択用と Spotlight 用の両方で、画像内の単語をテキストに変換するために使用されます。

しかし、com.apple.mediaanalysisd.photosanalysis と com.apple.mediaanalysisd.photos.maintenance が何を実行しているかの全容はまだ不明です。

各com.apple.xpc.activityアイテムの「ExpectedDuration」フィールドは、タスクの実行時間(秒単位)です。つまり、「3600」は60分、つまり1時間を意味します。

「Priority」と「CPUIntensive」フィールドも興味深いものです。CPUIntensiveフィールドを「NO」に設定するとシステムパフォーマンスにどのような影響が出るかは明確ではなく、Appleのドキュメントもほとんどありません。

「Interval」フィールドは、プロセス起動間隔(秒単位)です。com.apple.mediaanalysisd.photosanalysisの場合、これは 7200 に設定されており、これは 120 分を意味します。

com.apple.mediaanalysisd.photos.maintenance サービスの Interval フィールドはデフォルトで 86400 に設定されており、これは 24 時間に 1 回実行されることを意味します。

タスクが繰り返されるかどうか、スクリーンセーバー中に実行されるかどうか、PowerNap 中に実行されるかどうかを示すフィールドもあります。

最終的な考えと追加情報

macOSのデーモンアーキテクチャの大部分は、デーモンの起動、実行、終了を管理するlaunchdと呼ばれるバックグラウンドデーモンによって実行されます。ターミナルでlaunchdについて詳しく知りたい場合は、以下のマニュアルページをご覧ください。

man launchdそしてReturnキーを押します。

ターミナルコマンドには、launchdと連携してデーモンやバックグラウンドプロセスを制御できるlaunchctlという別のコマンドがあります。こちらも使い方や詳細情報についてはマニュアルページをご覧ください。

ターミナルでは、 topコマンドを入力して、Mac 上で実行中のすべてのプロセス (アプリとデーモン) を表示することもできます。

top

そしてReturnキーを押します。

より簡単でクリーンな方法は、Appleの/アプリケーション/ユーティリティ/アクティビティモニタアプリを使うことです。検索欄に「media」と入力すると、mediaanalysisdの使用状況が表示されます。

アクティビティ モニタでプロセスの名前をダブルクリックすると、そのプロセスに関する詳細情報を示すウィンドウが表示されます。

「開いているファイルとポート」タブでは、mediaanalysisd がファイルシステムとどのようにやり取りしているかについて、もう少し詳しく確認できます。また、他のいくつかの Apple フレームワークも使用していることがわかります。

  1. CoreNLP.フレームワーク
  2. DataDetectorsCore.フレームワーク
  3. レキシコンフレームワーク
  4. MetalPerformanceShaders.フレームワーク

このログから、システム内にもう一つ謎のAppleデーモン「analyticsd」が存在することも分かりました。analyticsdのマニュアルページはありますが、情報はほとんどなく、「診断」に使用されているとだけ書かれています。