ZRAMスワップの仕組みと本番環境での位置づけ
ZRAMとは、Linuxカーネルが提供する仮想ブロックデバイスで、RAM上に圧縮された擬似ディスク領域を作成します。この領域をスワップとして割り当てることで、物理ディスクへのスワップI/Oを回避しながら、実質的に使用可能なメモリ量を増やせます。
従来のスワップとの本質的な違いは速度と構造にあります。物理ディスクへのスワップアウトには数ミリ秒〜数十ミリ秒かかりますが、ZRAMはすべてメモリ内で完結するため、圧縮・展開のオーバーヘッドを含めてもマイクロ秒オーダーで処理されます。コンテナホストや、定期バッチ実行時に一時的なメモリスパイクが発生するサーバーで、バッファとして機能する点が評価されています。
ただし「スワップが増える」という安心感と実態には差があります。ZRAMはRAMを圧縮して使う構造上、システム全体のメモリプレッシャーが極度に高まると、ZRAM自体が圧縮に使うメモリも含めてOOM Killerの対象になり得ます。本番投入前にこの境界を正しく理解しておくことが運用上の前提です。
2026年現行環境での標準セットアップ手順
かつてはzramctlを直接操作するシェルスクリプトや、サードパーティの zram-config パッケージが広く使われていましたが、現在の主流はsystemdのzram-generatorです。Ubuntu 22.04以降、Debian 12、Fedora 36以降、RHEL 9系ではいずれもzram-generatorが標準的な選択肢として位置づけられています。
Debian/Ubuntu系でのインストールは以下のとおりです。
sudo apt install systemd-zram-generator
RHEL/Fedora系では次のコマンドを使います。
sudo dnf install zram-generator
インストール後、/etc/systemd/zram-generator.conf を作成して設定します。
[zram0]
zram-size = ram / 2
compression-algo = lz4
zram-size にはRAMの何分の一かを指定できます。サーバーの用途と搭載RAMに応じて調整してください。圧縮アルゴリズムは lz4 が速度と圧縮率のバランスに優れており、2026年時点でも多くの現場で第一候補とされています。メモリ節約を優先するなら zstd が圧縮率で上回りますが、CPU負荷が若干高まります。
設定ファイルを保存したら、デーモンをリロードしてユニットを起動します。
sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0.service
再起動後も自動で有効化されるため、enable は不要です。zram-generatorはsystemdのgenerator機構により、起動時に設定を読み込んでユニットファイルを自動生成します。
有効化後のメモリ使用量の変化を確認する
有効化直後の状態確認には zramctl が最も情報量が多いです。
zramctl
出力にはデバイス名、アルゴリズム、ディスクサイズ、実際の圧縮後サイズ(DATA)、圧縮前の合計(COMPR)、メモリ使用量(MEM)が表示されます。圧縮比が2〜3倍程度であれば正常な動作です。
スワップとして認識されているかは swapon --show で確認します。
swapon --show
TYPE カラムに partition ではなく zram と表示されていれば正しく機能しています。
メモリ全体の変化は free -h で把握できます。ZRAMを有効化すると Swap 行に容量が追加されます。一方で MemAvailable の数値は変化しない点に注意が必要です。ZRAMはあくまでスワップ領域を増やすものであり、物理メモリの空き量を直接増やすわけではありません。
より詳細な観測には /proc/meminfo を参照します。
grep -E 'SwapTotal|SwapFree|SwapCached|MemAvailable' /proc/meminfo
負荷をかけた状態でこれらの値の変化を watch -n 2 で継続観察すると、ZRAM利用率の推移を掴みやすくなります。圧縮効率が安定して維持されているかを定期確認する習慣をつけておくと、異常の早期検知に役立ちます。
OOMリスクの見極め方と事前チェックポイント
ZRAMスワップを導入したからといって、OOM(Out of Memory)が発生しなくなるわけではありません。「スワップがある=安全」という誤解が運用上のリスクを高めることがあります。
判断のポイントは、平常時のメモリ使用率と圧縮効率の組み合わせです。zramctl の出力でMEMとCOMPRの比率がほぼ1対1(圧縮効果がほぼない)な場合、データがすでに圧縮済みの形式(バイナリ・動画・暗号化済みデータなど)である可能性が高く、ZRAMの恩恵を受けにくいワークロードといえます。
OOMの兆候は dmesg に残ります。
dmesg -T | grep -iE 'oom|killed process'
ログにOOM Killerの痕跡がある場合は、ZRAM容量の拡大よりも先に根本原因を調査すべきです。メモリリークや想定外のメモリ消費があれば、ZRAMを増やしても問題は先送りになるだけです。
vm.swappiness の調整も検討対象です。デフォルト値(多くのディストリビューションで60)のままだと、物理メモリに余裕がある状態でもスワップが積極的に使われます。本番サーバーでZRAMを使う場合、vm.swappiness=10〜20 程度に下げることで、ZRAMへのアクセス頻度を抑えつつ、真にメモリが必要な場面だけスワップを使う挙動に近づけられます。
sudo sysctl vm.swappiness=10
永続化するには /etc/sysctl.d/ 配下にファイルを置きます。
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-zram.conf
また、DBMSやJVMなど重要プロセスについては、/proc/PID/oom_score_adj に負の値(例:-500)を設定することで、OOM Killerに狙われにくくなります。ZRAMの有無にかかわらず、本番サーバーでは重要プロセスのOOMスコアチューニングを合わせて行うのが定石です。
切り戻し手順と運用上の注意点
ZRAM設定を元に戻す場合は、デバイスをスワップから切り離してからユニットを停止します。
sudo swapoff /dev/zram0
sudo systemctl stop systemd-zram-setup@zram0.service
設定ファイル(/etc/systemd/zram-generator.conf)を削除またはリネームしておくと、再起動後に自動起動されなくなります。
注意が必要なのは、swapoff 実行時に既存のスワップアウトされたデータがすべて物理メモリに戻ろうとする点です。その時点でメモリが不足していると、swapoff 自体が失敗するか、OOMを引き起こすことがあります。切り戻しは負荷の低い時間帯に行い、事前に free -h で物理メモリに十分な余裕があることを確認してから実施してください。
既存スワップパーティションとの共存にも気を配る必要があります。swapon --show で複数のスワップ領域が表示される場合、優先度(priority)が高い方から使われます。ZRAMと物理スワップを共存させるときは、zram-generator.conf で swap-priority を明示的に設定し、ZRAMを優先させるのが一般的な構成です。
2026年時点での環境差分と採用動向
Fedora 38以降およびRHEL 9系では、デスクトップ・ワークステーション向けにZRAMがデフォルトで有効化されています。サーバー向けの最小インストールではデフォルト無効のままですが、zram-generatorは標準リポジトリに含まれているため、手動有効化のコストは低くなっています。
Ubuntu 24.04 LTSではzram-generatorを使う方式が公式ドキュメントでも言及されています。過去の ubuntu-zram や zram-config はメンテナンスが落ち着いており、新規構築ではzram-generatorに統一する方向が無難です。
Debian 12(bookworm)では zram-tools パッケージが引き続き利用可能ですが、設定のポータビリティを考えるとzram-generatorのINI形式の方が他ディストリビューションと共通化しやすく、AnsibleなどのIaCツールとも親和性があります。構成管理の観点からは、zram-generatorへの統一を検討する価値があります。
クラウド環境では、インスタンスタイプによって搭載メモリが少なく、ZRAMが実質的なコスト削減手段として機能するケースがあります。一方で、クラウドプロバイダーが提供するメモリ最適化インスタンスへの変更の方がトータルコストで有利な場合もあるため、ZRAMの採用はスペック見直しと並行して費用対効果を比較するのが現実的な進め方です。
カーネル5.x〜6.x系を通じてZRAMドライバの安定性は向上し、マルチストリーム対応や書き込み重複排除(deduplication)のサポートも整備されてきています。ただし本番環境での活用という観点では、長年安定して使われてきた圧縮スワップ機能の部分が依然として主軸です。新機能の積極的な採用は、まず非本番環境での検証を経てから判断することをお勧めします。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
PR・広告
[試して理解]Linuxのしくみ 増補改訂版(Amazon)
プロセス・権限・ファイルシステムなどLinux内部を図解で理解できる一冊。運用判断の勘所に。
※ Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。
