目次
Macのメモリが食い潰される
キャプチャでは数百Mbyte程度のメモリ使用量ですが、放置しておくと数Gbyte〜数十Gbyteまでメモリを使用していることがありました。
Macにおけるdistnotedプロセスとは
Apleのコミュニティの投稿によると、
distnoted(distributed notification server)は、タスク(プロセス)間通信を行うためのデーモンです。macOS内部も含め広範囲で使われています。
とされており、どのアプリが原因となって問題が生じるのか特定するのは難しいようです。
対処1 手動でコマンド実行
以下のコマンドをターミナルで実行し、distnotedプロセスを削除すればさしあたってメモリは解放されます。
killall distnoted
killallコマンドはプロセス名指定によるプロセスの削除です。
対処2 自動でコマンド実行
手動でのコマンド実行では、「気がついたらメモリが食い潰され、Macの動作が重くなっていた。」状態に対処できません。大して重くないコマンドなので一定間隔で自動実行して快適な状態を維持したいところ。
自動実行の方法として、Macではcronよりもlaunchctlが推奨されているようなので、launchctlを利用してコマンドを実行することにします。
手順
- コマンド実行を行うシェルスクリプトファイルを作成する(ファイル名はkill_distnoted.shとしました。)。
#!/bin/zsh
killall distnoted
- launchctlで登録するplistファイルを作成する(ファイル名はkill_distnoted.plistとしました。)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>kill_distnoted.sh</string>
<key>Program</key>
<string>/Users/{USER_NAME}/bin/automator/kill_distnoted.sh</string>
<key>StartInterval</key>
<integer>7200</integer>
</dict>
</plist>
先ほど作成したシェルスクリプトファイルの名称は、
「kill_distnoted.sh」としました。
保存場所は、
「/Users/{USER_NAME}/bin/automator/kill_distnoted.sh」です。
なお、実行間隔は7200秒(2時間ごと)で指定しています。
続いてplistファイルを
「~/Library/LaunchAgents/com.sh.kill_distnoted.plist」
に保存。
最後にシェルスクリプトが自動実行されるよう登録。
launchctl load ~/Library/LaunchAgents/com.sh.kill_distnoted.plist
登録状況を確認します。
launchctl list | grep "kill_distnoted"
(結果)
- 0 kill_distnoted.sh
この手順で正しいはず…。しばらく様子を見てみます。