ページング
Paging
ページングは、仮想アドレス空間と物理メモリを「ページ」という単位で対応付けて管理する方式です。ページを必要に応じてストレージから読み込む仕組みもありますが、ページングそのものがメモリ不足時の退避だけを意味するわけではありません。
🐾 猫で例えると?
おもちゃを選ぶアメショの周りに、小さな遊び場と大きな収納棚があると想像してみましょう。遊び場がRAM、棚がストレージです。おもちゃを同じ大きさの箱に分け、使う箱を遊び場へ対応付ける仕組みがページ単位の管理に似ています。棚との出し入れはその一部であり、順番に遊ぶこと自体がページングなのではありません。
💻 IT現場における「ページング」とは?
OSはアプリが見る仮想アドレスと、実際のRAM上の場所を対応付けます。すべての領域を常にRAMへ置く必要はなく、ファイルから読み込んだり、退避領域を使ったりできます。ただし、RAMを超える大きさのアプリが必ず動く保証ではなく、メモリや保存先の上限・アクセスの仕方に左右されます。
必要なページをそのまま参照できないと、ページフォールトが発生します。Windowsでいうハードフォールトは保存先からの読込が必要ですが、ソフトフォールトはRAM内のページを対応付けるなどして解決できます。フォールトの件数だけで「ディスクへのスワップが多い」と判断しないことが大切です。
⚠️ ページングの仕組みと注意点
必要なページがRAMに収まりにくく、入れ替えに多くの時間を費やして処理が進まない状態をスラッシングと呼びます。猫が遊ぶより棚への往復ばかりしているイメージです。ストレージがSSDなら音はしないため、動作音ではなくメモリ・I/O・応答時間で判断します。
Linux環境でのページング監視
サーバーの動作が極端に重くなった場合、エンジニアはまずメモリとページングの状況を疑い、以下のようなコマンドで調査を行います。
# Linuxで継続的な変化を見る例。停止はCtrl+C
vmstat 1
# si / so はスワップイン・アウトの指標
# 最初の行は起動後平均となる項目があるため、後続行も確認する si/soが続けて増えるときは、空きメモリ、ページフォールト、ストレージI/O、アプリの応答時間も照合します。値が大きいだけでスラッシングを断定せず、どのプロセスが何を使っているかを調べます。
🛠️ ページングを賢く使う(避ける)ためのポイント
システムを快適に保つため、ページングの特性を理解した上でエンジニアやユーザーが意識すべきポイントです。
- 作業量とRAMを見直す: ページングは通常のメモリ管理にも使われます。性能上の問題は、頻繁な読込・退避が処理を圧迫することです。使用量の増大やリークを確認したうえで、同時実行数やRAM容量を調整します。
- ストレージの高速化(NVMe SSD等): どうしてもページングが発生してしまう環境の場合、スワップ先であるストレージをHDDから高速なSSDに変更することで、遅延による体感ストレスを大幅に軽減できます。
- 不要なプロセス・タブの終了: ブラウザで何十個もタブを開きっぱなしにしていると、それだけでメモリを食いつぶします。こまめな不要データのクリーンアップ(断捨離)が重要です。
アメショが使いたいおもちゃを手元へ置けるように、よく使うデータがRAMへ収まると処理は進めやすくなります。仮想メモリの仕組みと、メモリ不足による頻繁な入れ替えを区別して、必要な対策を選びましょう。