あなたのWindowsマシンのメモリは足りているのか

PCの動きが遅いと「メモリ不足」を疑うのは専門家以外にも広がっている認識だろうと思います。 スマホのスペックにもメモリ容量が記載され、機種によっては初期から「メモリ解放ツール」等が提供され、メモリは操作感と密接に関連している事は広く知られるようになったように感じます。

しかしながら、搭載しているメモリが十分か・操作感を悪化させている原因がメモリ不足なのかを知るのは容易では有りません。 現代のOSは複雑なメモリ管理を行っており、不足・充足が曖昧だからです。

この記事ではWindowsのメモリ管理の仕組みと、自分のマシンのメモリが足りているかを確認する手順を紹介します。

Windows タスクマネージャー

PCの動作が重い場合はタスクマネージャーを開く方も多いと思います。 PC上のアプリケーションの性能に依存する代表的なコンポーネントの利用率を表示し、 性能を低下させている原因が分かるようになっています。

  1. CPU (使用率%)
  2. GPU (使用率%)
  3. ディスク (アクティブ時間%)
  4. メモリ (利用量%)

Windowsのタスクマネージャーは以下のような表示で、見渡せるようになっています。

is windows memory enough 2022 03 21 16 05 06

しかしながら、非常に負荷が高い時にCPUの使用率,GPUの使用率,ディスクのアクティブ時間は100%になりますが、メモリの利用量は通常70~90%程度を推移します。 タスクマネージャーの数字だけでメモリを不足を判断するのは非常に難しく、経験則に基づいたおおまかな判断を行うことしか出来ません。

Process Explorer

より詳細なメモリの情報を確認するために、Process Explorerを利用します。 Microsoftが提供する高機能版タスクマネージャーというような感じです。 適当な場所に展開して実行ファイルを開きます。

https://docs.microsoft.com/ja-jp/sysinternals/downloads/process-explorer

メニューの[View]->[System Information... Ctrl+I]->[Memory タブ]と移動します。 そうするとメモリの利用量の詳細な内訳が分かります。

is windows memory enough 2022 03 21 16 07 44

タスクマネージャー上の「メモリ使用量」グラフとProcess Explorerにおける"Physical Memory"のグラフは同義です。

is windows memory enough 2022 03 21 16 09 57

Process Explorer メモリ使用量の読み方

使用量は「Used = Total(OSが利用可能なメモリ) - Available(開放可能な領域)」で計算できます。 現代のOSは搭載されたメモリを出来る限り全て使った上で高速化を行うので、Availableは空き領域とは異なる概念です。

開放可能な領域は 「Available = Standby Page + Zeroed Page + Free Page」で計算できます。

Free Pageは内容が不要になった領域で初期化前、Zeroed Pageは初期化後のアプリケーションへ割当が可能なメモリ領域です。 本当にWindowsが利用していないメモリ領域は「Free Page+Zeroed Page」ということで、それ以外の領域は全て有効に活用されているということです。

Usedは主にワーキングセットで利用されており、各アプリケーションやOSやドライバが利用しているメモリ領域です。 利用頻度が低いものについては、Standby Pageへ自動的に移動されます。

2022 03 21 windows memory

物理メモリが足りなくなれば、メモリ内容はページファイルと呼ばれるファイル(SSD,HDD)に書き写された上で物理メモリ上から内容を削除します。 そして必要になった際にはファイルから読み出して物理メモリ上へ書き戻します。 基本的には物理メモリと比べてSSD,HDDは非常に低速なので、物理メモリが不足するまでは、利用頻度の低い内容であっても可能な限り物理メモリ上に保持しているという仕組みになっています。

Standby Pageはアクセスされる頻度に応じてPriority(優先順位)が決まっており、7は最高でプロセス間で共有される内容・5は通常のユーザが起動したアプリケーションが最初に入る場所・0は最低でアクセス頻度が最も低い内容です。 使われる頻度が低ければ優先順位は下がっていきます。 メモリが必要になった時に、未利用のメモリ領域が不足(Zeroed Pageの枯渇)しており内容をページファイルに追いやる必要があれば、Priorityが低いものから内容が削除されます。

物理メモリ上に存在する内容とページファイルに存在する内容を全て足し合わせたメモリ総量はCommit ChargeのCurrentから読み取れます。 物理メモリの使用量とコミットチャージの差が、ページファイルにのみ存在・物理メモリに読み込まれていないメモリ内容ということになります。

Paging Listsからメモリの枯渇を判断する

以上の内容を踏まえると「メモリが足りない」のフェーズは段階が有り緩やかに進むことが分かります。 そして、これはタスクマネージャーのメモリ使用量グラフだけでは判断がつかないです。

  1. アプリケーションが利用するメモリが全て物理メモリ上に存在する (Commit ChargeがUsedに収まっている)
  2. めったに使わないメモリ内容がページファイルに存在する (Zeroedは十分・Standby PageのPriority 0も十分存在)
  3. 利用頻度が少し高いメモリ内容がページファイルに追いやられる (Zeroedが減少・Standby PageのPriority 0の容量が0)
  4. 利用頻度が中程度のメモリ内容がページファイルに追いやられる (Standby PageのPriority 0~4の容量が0)
  5. 通常アプリケーションのメモリ内容もページファイルに追いやられる (Standby PageのPriority 0~5の容量が0)
  6. 新たなメモリ割り当てを行うことが出来ない・アプリケーションの異常終了 (Zeroed, Free, Standbyが枯渇)

1~2は性能への影響はほぼなくメモリが十分に足りている状況と言えます。 3~5が一般的に「パソコンが重い」の状況を引き起こし、高速にPCを使うためのメモリが不足している状況です。 6はアプリケーションが異常終了するので、完全にメモリが不足しています。

一般的に「メモリが不足しているのか知りたい」というニーズにおいては、Free,ZeroedとStandby PageのPriority 0~5あたりの状況を見れば理解できることが多いということでしょう。 メモリが不足してWindowsの動作が遅くなっているPCにおいては、Standby Pageの低いPriorityに0が並ぶことになります。 また、ページファイルへの書き込みも多くなるのでPaging File Write Deltaも上昇して0より大きな数字が表示されます。

参考までにメモリが不足してパフォーマンスが落ちている状況(状態4)のスクリーンショットです。メモリはあと1割近く利用可能ですが、Standby Pageが減少しており頻繁にPaging File Writeが発生して利用感はとても悪いです。 is windows memory enough 2022 03 21 16 10 21

参考資料