用語集/メモリ

“メモリ”の列

別名: メモリフットプリント

結論

アクティビティモニタの“メモリ”の列は、各プロセスが使っているメモリの量を示します。この数値はプロセスのメモリフットプリントを反映しているので、圧縮されずにRAMにあるデータだけでなく、圧縮されたメモリも含まれることがあります。

“メモリ”の列で並べ替えるのが、どのプロセスが最も多くのメモリを使っているかを知るいちばん早い方法です。プロセスごとの数値なので、ヘルパープロセスのあるアプリは複数の行に分かれます。

すべての行を合計しても、ウインドウ下部の“使用済みメモリ”とは一致しません。プロセスどうしでメモリを共有していることがあり、合計の数え方も異なるからです。

アプリのメモリが思ったより少なく見える理由

多くのアプリはヘルパープロセスを実行していて、ヘルパーごとに行があります。ブラウザのメインの行は控えめな数値でも、ヘルパーを合計するとずっと多くなることがあります。“表示” → “すべてのプロセス(階層表示)”を使うと一部のヘルパーが親の下に表示されます。または、行を自分で合計します。

“メモリ”の列の使い方

メモリプレッシャーが黄色や赤のときに、この列で並べ替えます。何も操作していないのに時間とともに増え続けるプロセスがないか見ましょう。メモリリークの可能性があります。アプリを終了して開き直せば、メモリは解放されます。

“表示” → “表示項目”から、“メモリ圧縮”などほかのメモリの列を追加すると、プロセスごとの詳細がわかります。

“メモリ”の列が測っているもの

macOSは、すべてのプロセスについて“物理フットプリント”と呼ばれる数を常に数えています。プロセスが書き込んで所有しているメモリを追跡するものです。アクティビティモニタの“メモリ”の列と、topコマンドのMEMの列は、どちらもこの数を表示しています。

いまRAMにある分だけでなく、プロセスが所有するメモリを数えるので、圧縮されたデータや、そのプロセスのためにグラフィックスに使われるメモリが含まれることがあります。プロセスが読み込んだだけのファイルは含まれません。こうしたファイルは、システムが捨てて後で読み直せるからです。

ドライバやシステムのコンポーネントがプロセスのために確保するメモリの一部は、プロセスがそのサイズを制御できないため、意図的にフットプリントから除外されています。そのため、“メモリ”の列はプロセス同士を比べる目安としては優れていますが、プロセスがシステムに使わせたメモリを1バイト残らず正確に記録したものではありません。

メモリ、実メモリ、プライベートメモリ、共有メモリの違い

“メモリ”タブで“表示 > 表示項目”を選ぶと、メモリの列を追加できます。それぞれ数えているものが異なります:

  • メモリ: プロセスの物理フットプリント。プロセス同士を比べるにはこれを使います。
  • 実メモリ: プロセスのうち、いまRAMにある量で、常駐サイズとも呼ばれます。圧縮されたデータは含まず、共有メモリを含むことがあるので、“メモリ”より大きくも小さくもなります。
  • プライベートメモリ: このプロセスだけが使っている常駐メモリ。
  • 共有メモリ: システムライブラリなど、ほかのプロセスと共有している常駐メモリ。
  • パージ可能なメモリ: 領域が必要になったらシステムが捨ててもよいと、アプリが印を付けたメモリ。
  • VM圧縮: プロセスのメモリのうち、圧縮されている量。

ターミナルでプロセスのメモリを確認する方法

次のコマンドは情報を読み取るだけです。アクティビティモニタを開いていないときや、数値を時系列で記録したいときに役立ちます。

  1. top -o memを実行すると、プロセスがメモリ順に一覧表示されます。MEMの列は、アクティビティモニタの“メモリ”の列と一致します。終了するにはqを押します。
  2. top -l 1 -o mem -n 10 -stats pid,command,memを実行すると、大きいプロセス上位10個を1回表示して終了します。
  3. footprintの後にfootprint Safariのようにアプリ名を付けて実行すると、そのメモリがカテゴリ別に表示されます。最後にあるphys_footprintの行が“メモリ”の列と一致し、phys_footprint_peakはプロセスの起動以降の最大値です。
  4. psが表示するのはRSSで、“実メモリ”の列と同じ常駐サイズなので、数値は“メモリ”の列と一致しないことに注意しましょう。

“メモリ”の列でメモリリークを見つける方法

  1. 更新を速くしたい場合は、“メモリ”タブで“表示 > 更新の頻度 > 非常に多く(1秒ごと)”を選びます。
  2. ヘルパープロセスも含めてアプリを探し、“メモリ”の数値を控えます。
  3. 書類やウインドウを増やさずに、いつもどおりアプリを使い続けます。
  4. しばらくしてから、もう一度数値を確認します。開いたものを閉じても増え続けて一度も下がらないなら、アプリがメモリリークを起こしている可能性があります。
  5. アプリを終了して開き直すと、メモリが解放されます。また起きるなら、アプリのアップデートがないか確認しましょう。

よくある質問

アクティビティモニタの“メモリ”の列は何を表す?

各プロセスが使っているメモリの量で、メモリフットプリントをもとにしています。この列で並べ替えると、最も多く使っているものがわかります。

“メモリ”の列の値を合計しても“使用済みメモリ”にならないのはなぜ?

プロセスどうしで一部のメモリを共有していて、システムの合計は別の方法で計測されているので、行の合計と全体の値はぴったり一致しません。

1つのアプリの行がたくさんあるのはなぜ?

そのアプリがヘルパープロセスを実行していて、アクティビティモニタが各プロセスを個別に表示するからです。

“メモリ”の列は“実メモリ”と同じ?

いいえ。“メモリ”はプロセスのフットプリントで、圧縮されたデータを含むことがあります。“実メモリ”は、ほかのプロセスと共有している一部のメモリを含め、いまRAMにある分だけです。

“メモリ”の列にGPUのメモリは含まれる?

システムがそのプロセスに割り当てたグラフィックスメモリは含まれることがあります。フットプリントの数には、通常のアプリのデータだけでなく、いくつかの種類のメモリが含まれるからです。

“メモリ”の列がpsなどのツールと一致しないのはなぜ?

psなどのツールが報告するのは常駐サイズで、メモリの数え方が異なるからです。topコマンドのMEMの列とfootprintコマンドは、アクティビティモニタと同じフットプリントの数を使っています。

関連項目

詳しい手順: CPUやメモリを使っているアプリ。

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