MacOSX nsurlsessiondのCPU使用率がずっと高い件

MacOS Catalinaにて
"nsurlsessiond" というデーモンプロセスのCPU使用率が、
ずっと高い状態(常に60%以上)になっているので悩まされてきましたが、
ついに解消することができたので記録しておきます。

そのせいで、うちのMacBook Pro (Mid-2012) が、
特に何もしてない状態でも、ファンが全速力で回転するほど熱くなってしまっていた。

対応したときのOSバージョン
10.15.4 (Catalina)

アップルのスレッドに解決法があった

Q: nsurlsessiond, trustd, syslogd high CPU

原因は、ディレクトリのパーミッションがおかしくて、
一時ファイルの作成に失敗しているためだそうな。

結果、trustdというプロセスが上手くファイル作成出来ずに、
nsurlsessiondの処理がループしてしまうというものっぽい。

解消手順

解消した手順を記載しておきます。

aslのログを確認

/var/log/asl 配下のログを確認してみる。
日付が1番新しいものを確認すると良い。

$ ls -lha /var/log/asl
total 1440
drwxr-xr-x   7 root  wheel   224B 10 11 00:23 .
drwxr-xr-x  28 root  wheel   896B 10 11 00:30 ..
-rw-------+  1 root  wheel   466K 10 10 20:34 2020.10.10.G80.asl
-rw-------+  1 root  wheel   151K 10 11 00:38 2020.10.11.G80.asl
-rw-------+  1 root  wheel   2.9K 10 11 00:38 BB.2021.10.31.G80.asl
drwxr-xr-x   5 root  wheel   160B 10 11 00:30 Logs
-rw-r--r--@  1 root  wheel    12B 10 11 00:38 StoreData

2020.10.11.G80.asl こういったファイルの中身を確認する。

$ syslog -f /var/log/asl/2020.10.10.G80.asl | less

405: mkdir: path=/var/folders/zz/zyxvpxvq6csfxvn_n000010w000087/0/ mode=0755: Operation not permitted.

↑こんなエラーが出力されている場合は、以降の手順で解消する。
私もちょうどこのエラーが出力されていた。
(/var/folders/zz/ 以降のパスはランダムで生成されるディレクトリ名です)

trustdのプロセスを停止

trustdというプロセスを一旦停止させる。
停止するにはkillコマンドを使う。

trustdのプロセスIDを調べましょう。

$ ps aux | grep trustd
_spotlight         879   0.0  0.1  4382316  10236   ??  S    12:24AM   0:00.31 /usr/libexec/trustd --agent
tyabtyab           455   0.0  0.1  4387648  17088   ??  S    12:24AM   0:03.86 /usr/libexec/trustd --agent
_locationd         293   0.0  0.0  4382412   7936   ??  S    12:23AM   0:00.13 /usr/libexec/trustd --agent
root               245   0.0  0.1  4383288  15032   ??  Ss   12:23AM   0:06.96 /usr/libexec/trustd

--agent というオプションがついてないやつがkillするプロセスですね。
(↑の例だと245がPID)

$ sudo kill -9 <PID of trustd>

停止しても、時間が経つと自動で起動するものです。

ディレクトリ削除

エラーログに出力されていた、
作成に失敗してる親ディレクトリを削除する。

パーミッション設定がおかしいことになってるので、
エラーがでていたディレクトリを削除しましょう。

$ sudo rm -rf /var/folders/zz/<your dir>

前述したエラーログでいうと、
/var/folders/zz/zyxvpxvq6csfxvn_n000010w000087 のディレクトリを削除します。

ディレクトリは、再度trustdプロセスが自動で作り直すのだと思います。
ここまでの手順で、nsurlsessiond のCPU使用率が下がっているはず。

ご苦労さまでした。


用語解説

nsurlsessiondとは

iCloud Driveとファイル同期したり、
バックアップなどするためのデーモンプロセスのようです。

ASLとは

/var/log/aslaslとはなにか?

MacOSXのシステムログで、
Apple System Logs の事みたいで、
システムログの管理用にデーモンプロセスが稼働しているようです。

ASLは、/var/log/asl配下にバイナリログ(.asl)を出力します。
/var/log/system.log ファイルにもプレーンテキストで出力するみたいです。

.aslファイルは、lessコマンドでなんとなく見ることも出来ますが、
バイナリファイルなので、専用のコマンド syslogを使って見る方が良いでしょう。

syslog -f <.asl file>

trustdとは

MacOSを構成するデーモンプロセスで、
システムの全プロセスの証明書の評価をしてる重要なプロセスみたいです。

https、メール、Keychainなどの証明書を評価・管理するのにこれが使われてるみたいですね。

まとめ

解決後に色々調べてみると、
CatalinaにOSバージョンアップしたときから、おかしかった可能性あり。

私のMacBook Proは、2012年製と言うこともあり。
スペック的に耐えきれずファンが煩いのかなぁと思っていましたが、
今回の対応でとても静かになりました。

コメントを残す