【メモリ1GB VPSの救世主】月額数百円VPSが落ちなくなる!zram+zstdで実質メモリ倍増!OOMクラッシュを防ぐ軽量チューン

この記事は約7分で読めます。
この記事が役立ったらブックマーク! あとで読み返したり、環境構築時のリファレンスに活用できます
B! はてなブックマークに追加

月額ワンコイン前後で手軽に借りられる「メモリ1GB」の格安VPS。
WordPressやAPIサーバー、Botなどを動かしていると、ちょっとしたアクセス集中やバックグラウンド処理の重なりで「メモリ不足によるOOM Killer(プロセス強制終了)」や「SSDスワップによる激しいサーバー遅延(スワップ死)」に直面しがちです。

本記事では、Linuxカーネル標準機能である「zram(メモリ上でのリアルタイムデータ圧縮)」を導入し、SSDへの遅延・書き込み負荷を抑えながら実質的なメモリ領域を安全に拡張する手順をわかりやすく解説します。

1. 1GB VPSが直面する「スワップ死」問題とは?

Linuxは物理メモリが足りなくなると、SSD/HDD上に確保したスワップ領域(/swapfile など)にデータを退避させます。
しかし、ストレージへの読み書き速度はRAMに比べて圧倒的に遅いため、以下の問題が発生します。

  • レスポンスの急激な悪化: スワップが頻発するとディスクI/Oが詰まり、SSHの応答すら返ってこなくなる
  • SSDの寿命摩耗: スワップファイルへの激しい書き込みでSSDが劣化する
  • OOMクラッシュ: スワップすら追いつかなくなると、MySQLやWebサーバーなどの最重要プロセスが突然死する

2. zramの仕組みとメリット

zram(Compressed RAM Block Device) は、RAM上に圧縮ブロックデバイスを作り、そこをスワップ領域として使う仕組みです。

Plaintext
【通常のスワップ】
[ 物理RAM ]  ── (メモリ不足) ──>  [ SSD スワップファイル ] (激遅・ディスク摩耗)

【zram スワップ】
[ 物理RAM ]  ── (メモリ不足) ──>  [ zram(RAM内を高効率圧縮)] (超高速・SSD書き込みゼロ)
  • CPUで高速圧縮(zstd): RAM内でデータを2〜3倍程度に圧縮して保持するため、実質的なメモリ容量が1.5〜2倍に拡張される
  • 超高速レスポンス: ディスクI/Oが発生しないため、スワップ時でもサーバーが重くなりにくい
  • 2段構えのセーフティネット: zramを優先度高、SSDスワップを優先度低にしておくことで、zramを使い切ったときだけSSDに逃がす安全設計が可能

3. 実践構築手順(Ubuntu / Debian系)

STEP 1: zram-tools のインストール

Ubuntu / Debian系であれば、専用の管理パッケージを使って数分で導入できます。

Bash
sudo apt update
sudo apt install -y zram-tools

STEP 2: 設定ファイルの編集

設定ファイルを開きます。

Bash
sudo nano /etc/default/zramswap

以下の内容に設定します(コメントアウトされている場合は # を外してください)。

INI
# zramに割り当てる物理メモリの割合(1GB環境なら 50% が標準的で安全です)
PERCENT=50

# 最も圧縮効率と速度のバランスに優れたアルゴリズム「zstd」を指定
ALGO=zstd

# スワップ優先度(SSDスワップより優先して使わせるため 100 に設定)
PRIORITY=100

保存(Ctrl + O ➔ Enter ➔ Ctrl + X)します。

STEP 3: サービスの起動と自動起動有効化

Bash
# サービスの再起動と自動起動化
sudo systemctl restart zramswap
sudo systemctl enable zramswap

4. 性能を最大限引き出すチューニング

zramを導入しただけでは、Linux標準のカーネルパラメータでは「ギリギリまでスワップを使わない」挙動になりがちです。

圧縮スワップを積極的に使わせて物理メモリの空きを広く保つため、vm.swappiness を引き上げます。

Bash
# 即時反映
sudo sysctl vm.swappiness=100

# OS再起動後も維持されるよう恒久化
echo "vm.swappiness=100" | sudo tee -a /etc/sysctl.d/99-zram.conf

💡 ポイント:
通常のSSDスワップで swappiness=100 にするとディスクが詰まりますが、「zramスワップ」ならメモリ内完結なので 100 に設定しても高速に処理されます。

5. 動作確認と状態チェック

設定が反映されているか確認します。

① スワップ優先度の確認

Bash
swapon --show

出力例:

Plaintext
NAME                     TYPE       SIZE   USED PRIO
/var/spool/swap/swapfile file         2G  52.3M   -2
/dev/zram0               partition 480.1M     0B  100

/dev/zram0 の PRIO が 100、SSDスワップが -2(または低い数値) になっていれば成功です。スワップ発生時はまず超高速な zram が最優先で利用されます。

② リアルタイム圧縮状況の確認

Bash
zramctl

出力例:

Plaintext
NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd        480.1M  120M   38M   42M       2 [SWAP]

DATA(圧縮前の元データ量)に対して COMPR(圧縮後のサイズ)が大幅に小さくなっていることが確認できます。

6. おまけ:ディスクに残った古いスワップを zram へ吸い上げる

導入時点で既に SSD 側のスワップファイルにデータが溜まっている場合は、一度スワップを再起動して zram 側に吸い上げ直すことができます。

Bash
# SSDスワップのパス(swapon --showで確認したもの)を指定して再読み込み
sudo swapoff /var/spool/swap/swapfile && sudo swapon /var/spool/swap/swapfile

これでディスクスワップが完全に解放され、すべてメモリ圧縮スワップへ綺麗に移行します。

7. まとめ

  • zram-tools × zstd で1GB VPSのメモリ実効容量を大幅拡張
  • PRIO=100 で超高速メモリ圧縮スワップを最優先化し、SSDスワップを最後の安全装置として配置
  • vm.swappiness=100 で積極的に圧縮を活用し、OOMクラッシュとサーバー遅延を劇的に防止

格安VPSを限界まで安定・延命運用したい方は、サーバー初期構築時に必ず入れておくべきおすすめ設定です!

コメント

タイトルとURLをコピーしました