MacのDropboxクライアントがたまにCPUを消費しまくるっていう
バージョンアップのおかげか、メモリ使用量が問題になることはほとんどなくなったDropboxちゃん。いいぞいいぞ、でもたまにCPUをどか食いするのは何故なの><
ぐぐってみたら、結構同じような症状はあるみたい。mac dropbox cpu - Google 検索
CPU使用率が高いとファンがうるさいし動作全般がもっさりしてしまうので、Dropboxのメモリ消費量があまりにも鬼畜だったので監視して適宜殺すことにしたで書いたシェルスクリプトをちょこっと書き換えてCPU使用率も監視することに。
#!/opt/local/bin/zsh set -A array $(ps aux -m | grep Dropbox.app | grep -v grep | grep ama-ch) if [ $(echo $array |wc -w) -eq 0 ] then # Dropboxが起動してなかったら通知・起動 /usr/local/bin/growlnotify -t 'Warning' -m 'DropBox is dead!!' -I /Applications/Dropbox.app osascript ~/applescripts/runDropbox.scpt else # メモリ消費量が512MBを超えてる or CPU使用率が80%以上ならkill if [ $array[6] -gt 512000 -o $(echo "$array[3]>80" | bc) -eq 1 ] then kill $array[2] && /usr/local/bin/growlnotify -t 'Report' -m 'DropBox was killed.' -I /Applications/Dropbox.app osascript ~/applescripts/runDropbox.scpt fi fi
3行目最後のgrep ama-chは、ログインユーザー名に適宜変更します。
7行目のrunDropbox.scptの中身は前回参照。
psコマンドで出力されるCPU使用率は82.6のような小数点以下1桁の小数だから、素直に条件式で
test 82.6 -gt 80 && echo ok
こんな風に比較するとエラーになっちゃう。*1
そこでbcコマンドの比較演算子を使って、
test $(echo "82.6>80" | bc) -eq 1 && echo ok
このように対処した。bcの比較は成立すると1を、しなければ0を返すから、これなら判定できる。
でももっとスマートな方法ありそうな気がする><
そんな訳で、このスクリプトをcronに突っ込んでおけば自動でCPU使用率・メモリ使用量を監視,必要な時に再起動してくれます!
*1:シェルは整数しか扱えないため