用語集/CPU、GPU、エネルギー

測定されないプロセス

別名: 一覧の合計が全体と合わない理由

結論

システムモニタに並ぶプロセスの合計が、グラフの全体と一致することはめったにありません。アクティビティモニタでは、各コアが100%として数えられることと、2回のサンプルの間に起きた仕事が漏れることが理由です。ほかのモニタアプリではさらに、macOSがアプリに測定を許すのは自分のユーザに属するプロセスだけなので、WindowServerやkernel_taskなどのシステムプロセスは、ヘルパーが読み取らない限り空欄のままになることも理由です。

2つの別々のことが起きていて、分けて考えるとわかりやすくなります。1つ目は計算の問題です。アクティビティモニタの“% CPU”の列はコア1つに対する割合なので、8コアのMacなら列の合計は800%になり得ますが、下部のグラフはマシン全体に対する割合を示しています。コア数で割れば、サンプルの間に始まって終わったプロセスの分を除いて、2つは一致します。

2つ目はアクセス権の問題です。macOSは、プロセスのCPU時間、メモリ、ディスクやネットワークの通信量といった詳しい情報を、そのプロセスを所有するユーザかrootにしか教えません。アクティビティモニタはApple製で、すべてを見られるシステムサービスを通じて読み取っています。他社製のモニタアプリはユーザとして動くので、rootやシステムアカウントが所有するプロセス(一覧の上位にあるものの大半)は何も報告せず、アプリの合計はMac全体の合計に届きません。

アクティビティモニタの数値を一致させる

“CPU”タブを“% CPU”で並べ替え、上位の行を足してみましょう。忙しいMacなら、すぐに100%を超えます。次に、一覧の下にある“システム”と“ユーザ”の数値を読みます。こちらはMac全体に対する割合です。列はコアごと、概要はMac全体で、両者の比率がコア数になります。

残りの差はタイミングです。アクティビティモニタは、デフォルトで5秒ごとにサンプルを取ります(“表示 → 更新の頻度”)。1秒だけ動いて終了するプロセス、たとえばシェルのコマンド、Spotlightのワーカー、アプリが起動してすぐ閉じたヘルパーは、合計には加わっても、一覧には一度も現れません。

ヘルパーの役割と、それを求めるモニタアプリがある理由

自分が所有していないプロセスを測定するには、モニタアプリに小さな特権ヘルパーが必要です。macOSがパスワードを使ってインストールし、“これらのプロセスはどれだけ使っているか”という1つの問いに答えます。ヘルパーはrootとして動くので、慎重なアプリはヘルパーをオプションにし、小さく保ち、何を読み取るかを正確に説明します。

ヘルパーがない場合、モニタアプリが取るべき誠実な態度は、それを明示することです。測定できないシステムプロセスは空欄で表示し、その数を示し、一覧の合計が全体より少ないことを書き添えます。ヘルパーなしでkernel_taskの数値を表示しているモニタアプリは、推定しています。

よくある質問

アクティビティモニタで% CPUの合計が100%を超えるのはなぜ?

各コアが100%として数えられるからです。8コアのMacなら、プロセス全体で800%になることがあります。一覧の下にある“システム”、“ユーザ”、“アイドル状態”の数値はMac全体に対する割合なので、合計は常に100%になります。

他社製のモニタアプリで、CPUやメモリが表示されないプロセスがあるのはなぜ?

macOSは、アプリが詳しい数値を読み取れるプロセスを、同じユーザが所有するものに限っているからです。WindowServer、kernel_task、mds_storesなどのシステムプロセスはrootやシステムアカウントに属するので、macOSが読み取りを許したヘルパーがモニタアプリにない限り、空欄のままです。

特権ヘルパーは安全?

rootとして動くプログラムなので、信頼できるかどうかが大事です。行儀の良いヘルパーは小さく、プロセスの数値を読み取ること以外は何もせず、オンにしたときだけインストールされ、同じ場所から削除できます。有効にする前に、アプリが何をするかの説明を読みましょう。

関連項目

アクティビティモニタより優れたものをお探しなら、Mac向けアクティビティモニタの代替アプリのおすすめをご覧ください。用語集のすべての用語も見られます。