【スワップ】

swap(スワップ) とは?

💡 メモリが満員電車になったら、一時的に隣のホームに退避させる仕組み
📌 このページのポイント
swap の仕組み RAM(物理メモリ) アプリA アプリB アプリC 空きなし! メモリがいっぱい... 使用頻度の低いデータを退避→ スワップ 復帰 ディスク(swap領域) 退避されたデータ 空き領域 ⚠️ RAMより数百倍遅い スラッシング(thrashing)に注意 RAM↔swap の行き来が頻発すると、システムが極端に遅くなる
swap のイメージ(RAMが不足するとディスクに退避)
ひよこ ひよこ

swapってメモリと何か関係あるの?

ペンギン先生 ペンギン先生

そうだよ。パソコンのRAM(物理メモリ)がいっぱいになったとき、あまり使われていないデータをディスクに一時退避させて、RAMに空きを作る仕組みがswapなんだ。満員電車から降りて待合室で待ってもらうイメージだね

ひよこ ひよこ

じゃあswapがあればメモリが少なくても大丈夫なの?

ペンギン先生 ペンギン先生

完全に代わりにはならないんだ。ディスクはRAMより何百倍も遅いから、swapを大量に使い始めると動作がものすごく遅くなる。「スラッシング」といって、ずっとswapとRAMの間でデータを行き来させ続ける状態になると、ほぼフリーズしたように感じるよ

ひよこ ひよこ

スワップ領域ってどうやって作るの?

ペンギン先生 ペンギン先生

2つの方法があるよ。1つはディスクに専用のパーティションを作る「swap partition」、もう1つは通常のファイルとして作る「swap file」だね。最近のLinuxではswap fileのほうが手軽で、`fallocate` と `mkswap` コマンドで簡単に追加できるよ

ひよこ ひよこ

swapをどれくらいの大きさにすればいいの?

ペンギン先生 ペンギン先生

昔は「RAMの2倍」が定番だったけど、今はRAMが大きいから、4〜8GBのRAMならRAMと同量、16GB以上なら半分程度で十分なことが多いね。ハイバネーション(休止状態)を使うならRAM以上のswapが必要だよ

ひよこ ひよこ

swappinessっていう設定があるって聞いたんだけど?

ペンギン先生 ペンギン先生

いいところに気づいたね!`vm.swappiness` はLinuxカーネルパラメータで、0〜200の値でswapの積極度を制御するんだ。デフォルトは60で、値を下げるとRAMをギリギリまで使ってからswapする。データベースサーバーでは swappiness=10 くらいに下げることが多いよ。逆にメモリが潤沢でもswapを完全に0にするのは推奨されていなくて、OOM Killerが暴れるリスクがあるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「swap」って出てきたら「メモリが足りないときにディスクで代用する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「swap」 = 交換する
💬 メモリとディスクの間でデータを「交換(swap)」することからこの名前がついたよ
← 用語集にもどる