スワップの作成と調整
スワップは、メインメモリが足りなくなったときにディスクの一部を臨時のメモリとして使う仕組みです。ディスクはメモリよりずっと遅いので万能ではありませんが、無いとメモリ不足の瞬間にプロセスが強制終了されかねません。ここではスワップファイルの作り方と、swappinessという「どれだけ逃がしたがるか」の調整値、スワップを持たない選択肢まで見ていきます。
アプリをたくさん開いていたら、動作が急に重くなった経験はないだろうか。メモリが足りなくなると、Linuxはディスクの一部を臨時のメモリとして使い始める。これがスワップだ。
スワップは、メインメモリ(RAM)に入りきらなくなったデータの一部を、一時的にディスクへ追い出しておく仕組みだ。ディスクはメモリに比べて桁違いに遅いので万能の解決策ではないが、無いよりはずっとましだ。
👀 まず今の状態を確認する
スワップを設定する前に、いま何がどれだけ使われているかを見ておこう。よく使うのが swapon --show と free -h の2つだ。
swapon --show は、現在有効になっているスワップ領域の一覧を表示する。free -h は、メモリとスワップの使用量をまとめて、人が読みやすい単位(GB・MBなど)で見せてくれる。
この出力から、Swapの行に total が0であれば、そのマシンにはまだスワップが設定されていないと分かる。
🏗️ スワップファイルを作る手順
スワップ専用のパーティションを切る方法もあるが、後から容量を調整しやすいスワップファイルを使う方法が今は主流だ。手順は4段階で覚えるとよい。
1段階目は fallocate で、指定したサイズ分のファイルをディスク上に確保する。2段階目は mkswap で、そのファイルを「スワップ領域として使える形式」に初期化する。ファイルシステムを作るmkfsのスワップ版と考えると分かりやすい。
3段階目の swapon で、初期化したファイルを実際にスワップとして有効にする。ここまでで今すぐは使えるようになるが、再起動すると設定は失われてしまう。
4段階目として、既に学んだ /etc/fstab に1行追記しておくと、再起動後も自動でスワップが有効になる。書式は /swapfile none swap sw 0 0 のような形になる。ここまでの4段階は必ずセットで行う。3段階目のswaponだけで満足してfstabへの追記を忘れると、次に再起動したときに「スワップが消えた」と慌てることになるので、作った直後にその場で追記まで終わらせておくのが安全だ。
🎚️ swappiness——どれだけ逃がしたがるか
スワップ領域を用意しただけでは終わらない。次に押さえておきたいのが、Linuxカーネルが持つswappinessという0から100までの調整値だ。これは「メモリに余裕があるうちからどれだけ積極的にスワップへ逃がすか」という度合いを表す。
値が大きいほど、メモリがまだ残っていても早めにデータをスワップへ逃がすようになる。値が小さいほど、本当にメモリが厳しくなるまでスワップを使わずに粘る。この値は用途によって最適な位置が変わるという性質がある。
デスクトップ用途では、キー入力の反応など体感速度を重視して値を低めにする調整がよく行われる。一方でメモリに常時余裕がないサーバーでは、デフォルトのままか、負荷傾向に応じた値が使われることが多い。
🤔 スワップ無し運用という選択
近年、メモリを大量に積んだサーバーや、SSDの寿命を気にするクラウド環境などでは、あえてスワップを持たない運用も選ばれるようになってきた。
スワップが無ければ、メモリが尽きたときにすぐOOM Killerが動いて特定のプロセスが終了させられる。挙動が予測しやすく「遅くなってから気づく」より「早く気づいて対処する」方を選ぶ考え方だ。とはいえこれは潤沢なメモリと迅速な障害対応の体制があってこそ成り立つ選択であり、一般的な個人用途では基本的にスワップを用意しておく方が無難だ。
自分の環境がデスクトップなのかサーバーなのか、メモリに余裕があるのかで、スワップとの付き合い方は変わってくる。まずは free -h で現状を眺めるところから始めてみるとよい。