zramへの移行を検討する背景
従来のスワップ領域はディスク上のパーティションやファイルを利用するため、メモリが逼迫した際に I/O レイテンシが急増するという構造的な問題があります。SSD 化でその影響は緩和されましたが、NVMe でも数十マイクロ秒のアクセスタイムは RAM の数ナノ秒と比べると数桁の差があり、スワップが発生した瞬間にシステム応答が目に見えて悪化します。
zram はこの問題に対するカーネルレベルの回答です。RAM 上に圧縮された仮想ブロックデバイスを作成し、そこにスワップアウトすることで、ディスク I/O を完全に排除します。圧縮率は用途によって異なりますが、lz4 アルゴリズムを使用した場合、テキスト主体のプロセスメモリでは 2〜3 倍程度に圧縮されることが一般的です(実際の圧縮率はワークロードに依存するため、想定例として参照してください)。
2026年時点では、Ubuntu 24.04 LTS・Fedora 40 以降・RHEL 9 系といった主要ディストリビューションがデフォルトで systemd-zram-generator を採用しており、クラウドインスタンスや組み込み用途を問わずデファクトスタンダードになりつつあります。一方で、既存サーバーのスワップ設定を引き継いだまま運用しているケースも多く、移行の需要は現場で継続しています。
移行前の設計判断:何をどう圧縮するか
zram への移行を決める前に、現在のスワップ利用状況と目的を整理しておく必要があります。以下の観点を確認してください。
スワップの役割を確認する
スワップには大きく「メモリ不足の安全網」と「hibernate(ハイバネーション)用イメージ格納」の2つの役割があります。zram はメモリ不足の安全網としては有効ですが、ハイバネーションには対応していません。ハイバネーションを使用しているシステムでは、ディスクスワップとの併用か、移行の見送りが必要です。
圧縮アルゴリズムの選択
zram が対応する主な圧縮アルゴリズムは lz4・zstd・lzo です。2026年現在のカーネル(6.x 系)では zstd が推奨されるケースが増えています。lz4 は CPU 負荷が最小でレイテンシを優先したい場合、zstd は圧縮率と速度のバランスを取りたい場合に適しています。利用可能なアルゴリズムは /sys/block/zram0/comp_algorithm で確認できます。
zram デバイスのサイズ設計
zram デバイスのサイズ(disksize)は、実際に消費する RAM ではなく論理上の上限サイズです。圧縮後の実メモリ消費はワークロード依存のため、disksize を RAM の 50〜100% に設定するのが一般的です。RAM の 150% を超える設定は、圧縮が効かないワークロードでの OOM リスクになるため避けた方が安全です。
systemd-zram-generator による本番適用手順
現行の標準的な手順は systemd-zram-generator を使う方法です。古い zram-tools や手動スクリプトによる設定は、systemd の管理外になるため新規環境では推奨されません。
パッケージの確認とインストール
Ubuntu 24.04 では systemd-zram-generator がデフォルトでインストール済みです。Debian 系では apt install systemd-zram-generator、RHEL/Rocky 系では dnf install zram-generator でインストールします。インストール後、systemctl status systemd-zram-setup@zram0.service で状態を確認できます。
設定ファイルの作成
設定は /etc/systemd/zram-generator.conf に記述します。既存のディストリ付属設定が /usr/lib/systemd/zram-generator.conf.d/ にある場合、/etc/ 側の設定が優先されます。以下は想定例です。
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
swap-priority = 100
zram-size には ram という変数が使えるため、物理 RAM 量に依存した動的な設定が可能です。swap-priority を既存のディスクスワップ(通常 -2〜10)より高く設定することで、zram を優先的に利用させることができます。
既存スワップの段階的無効化
本番環境では既存スワップを即時削除するのではなく、以下の順序で段階的に進めることを推奨します。
- 設定ファイルを作成し
systemctl daemon-reloadを実行する systemctl start systemd-zram-setup@zram0.serviceで zram デバイスを起動するswapon --showで zram0 がスワップとして認識されていることを確認する- 既存スワップのプライオリティを下げるか
swapoff /dev/sdXYで一時無効化する - 数日間の運用で問題がなければ
/etc/fstabから旧スワップエントリを削除する
移行後の動作検証
設定適用後は、以下のコマンドで zram の動作状態を確認します。
# スワップ一覧と優先度の確認
swapon --show
# zram デバイスの圧縮統計
cat /sys/block/zram0/mm_stat
# zramctl でのサマリー表示
zramctl
mm_stat の出力は左から「元のデータサイズ(バイト)」「圧縮後サイズ」「実消費メモリ」「最大消費メモリ」「スワップイン総量」「スワップアウト総量」「同ページ数」「huge ページ数」の順です。圧縮が有効に機能していれば、元サイズに対して圧縮後サイズが小さくなっているはずです。
圧縮率が 1.0 未満(元サイズより大きい)の場合、圧縮が逆効果になっています。暗号化データやバイナリが多いワークロードでは圧縮率が低くなる傾向があるため、mm_stat を定期的に確認し、アルゴリズム変更や disksize の見直しを検討してください。
また、vmstat 1 や sar -B を用いてページスワップの頻度を監視し、zram 導入前後でページアウト頻度に変化がないか確認することも有効です。
本番ロールバック手順
zram 運用中に問題が発生した場合、または従来スワップへ戻す必要が生じた場合のロールバック手順を示します。
zram の停止と設定無効化
まず zram デバイスをスワップから切り離します。
# zram をスワップから外す
swapoff /dev/zram0
# サービスを停止する
systemctl stop systemd-zram-setup@zram0.service
swapoff は現在 zram に退避中のページを RAM に戻そうとします。RAM の空き容量が極端に少ない状態での swapoff は OOM を引き起こすリスクがあるため、事前に free -h で空き RAM を確認してください。空き容量が zram の使用量より少ない場合は、先にキャッシュのドロップ(echo 3 > /proc/sys/vm/drop_caches)やプロセスの終了でメモリを確保してから実行します。
設定ファイルの削除と旧スワップの復元
zram-generator の設定ファイルを削除またはリネームしてから、旧スワップを有効化します。
# 設定を無効化(削除ではなくリネームで退避)
mv /etc/systemd/zram-generator.conf /etc/systemd/zram-generator.conf.bak
# daemon-reload で設定を反映
systemctl daemon-reload
# 旧スワップパーティション/ファイルを有効化
swapon /dev/sdXY
# 永続化は /etc/fstab のエントリが残っていれば不要
次回起動時も旧スワップが有効になるよう、/etc/fstab のエントリが残っていることを確認してください。段階的移行を推奨した理由はここにあります。fstab エントリを削除していなければ、ロールバックは数コマンドで完結します。
自動起動の無効化
設定ファイルを削除しても、ディストリによっては /usr/lib/systemd/zram-generator.conf.d/ 配下のデフォルト設定が残っていることがあります。systemctl status systemd-zram-setup@zram0.service で次回起動時に自動起動される状態でないことを確認してください。
2026年現行環境での注意点と差分
ディストリビューションによって zram の初期設定が異なるため、移行時に既存の自動設定と競合しないよう注意が必要です。
- Ubuntu 24.04 LTS:
systemd-zram-generatorがデフォルト有効で、RAM の 50% が zram0 として設定されています。既存設定を上書きする場合は/usr/lib/systemd/zram-generator.conf.d/を確認した上で/etc/systemd/zram-generator.confを作成してください。 - RHEL 9 / Rocky Linux 9 / AlmaLinux 9:
zram-generatorパッケージが標準リポジトリに含まれます。従来のzram-swapサービスとの競合に注意し、移行前に旧サービスが無効化されていることを確認してください。 - Debian 12(Bookworm): デフォルトでは zram は有効化されていません。
apt install systemd-zram-generator後に設定ファイルを作成することで有効になります。 - カーネル 6.1 以降:
zstdの性能が改善されており、lz4 との差が縮まっています。6.x 系カーネルを使用している環境では zstd を優先的に試すことを検討してください。 - コンテナホスト(LXC/KVM): ゲスト OS 内での zram 設定はホストのメモリ管理と二重になる場合があります。ハイパーバイザー側でメモリバルーニングを使用している場合は、zram の効果と干渉を事前に検証してください。
zram は「RAM を増やせない制約の中でメモリ効率を上げる」という要件に対して、カーネル標準機能として成熟した選択肢になっています。ただし、銀の弾丸ではなく、圧縮 CPU コストの増加やメモリ帯域の消費を伴います。移行後は mm_stat と CPU 使用率の双方を継続的に確認し、ワークロードに合ったアルゴリズムとサイズ設定を継続的に調整することが、安定した本番運用につながります。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
PR・広告
[試して理解]Linuxのしくみ 増補改訂版(Amazon)
プロセス・権限・ファイルシステムなどLinux内部を図解で理解できる一冊。運用判断の勘所に。
※ Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。
