vm_stat

macOS の仮想メモリ統計を表示するコマンド。Linux の vmstat とは別物で、カーネル(XNU)の Mach レイヤーが管理するページの状態をそのまま覗ける。

使い方

  • vm_stat — OS 起動からの累積値
  • vm_stat 1 — 1 秒ごとの差分(1 行目のみ累積値)

核心: free の少なさはメモリ不足のサインではない

macOS は空きメモリを「もったいない」とみなし、キャッシュなどに使い切る設計。逼迫かどうかは Compressions / Pageouts / Swapouts が増え続けているかで判断する。

主な項目

今の状態(スナップショット)

項目意味
free未使用
active最近使われている
inactiveしばらく未使用。回収候補(再アクセスで active に戻る)
purgeableアプリが「捨ててよい」と宣言したキャッシュ

累積カウンタ(起動からの回数)

  • Pages reactivated: inactive → active に戻った回数。多いと RAM 不足の兆候
  • Pageins / Pageouts: ディスクからのページ読み込み / 書き出し
  • Compressions / Decompressions: メモリ圧縮 / 展開
  • Swapins / Swapouts: 圧縮済みページのディスク復帰 / 退避

逼迫時の動きは 2 段構え

  1. 圧縮: まず未使用の anonymous ページを圧縮して RAM 内に保持(ディスクより桁違いに速い)
  2. スワップ: それでも足りないときだけ、圧縮済みページをディスクへ書き出す

つまり macOS の swap 対象は「圧縮済みページ」。Swapouts が増え続けるのは、圧縮でも吸収できない本物のメモリ不足。

圧縮率は stored in compressor ÷ occupied by compressor で計算できる。

実運用(SRE 視点)

  • vm_stat 1 の差分で Pageouts / Swapouts / Compressions の伸びを見る
  • Activity Monitor の「メモリプレッシャー」の裏側がこの仕組み。memory_pressure コマンドでも確認できる