ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Linuxサーバー

Linux に Swap(仮想メモリ)を追加する方法:swap ファイル作成と swappiness 設定

6 ステップ 6 分で読めます 4 回閲覧 0
目次

メモリの少ない VPS では、ソフトウェアのビルド、データベースの稼働、急なアクセス増加などでメモリが枯渇し、OOM キラーによって MySQL などのプロセスが強制終了されることがあります。Linux に Swap(仮想メモリ)を追加しておくと、メモリ不足時にあまり使われないデータをディスクへ退避でき、安全なバッファになります。本記事では swap ファイルの作成、起動時の自動有効化、swappiness の調整方法を紹介します。Debian/Ubuntu と CentOS/Rocky/AlmaLinux の KVM VPS・専用サーバーに対応しています。

Swap はメモリよりはるかに低速で、あくまで緊急用のバッファです。常に大量の swap を使っている場合は、メモリの増設をご検討ください。

ステップ1:現在のメモリと Swap の使用状況を確認する

free -h でメモリと既存の swap を、swapon --show で swap が有効か、df -h でルートパーティションに十分な空きがあるかを確認します。swap サイズの目安は次のとおりです。

物理メモリ推奨 Swap
1 GB 以下1~2 GB
2~4 GB2 GB
8 GB 以上2~4 GB(必要に応じて)
free -h
swapon --show
df -h /

ステップ2:fallocate で Swap ファイルを作成する

fallocate は指定サイズのファイルを一瞬で確保できます。サポートされていないと表示される場合(一部の古いファイルシステム)は、時間はかかりますが互換性の高い dd を使います。ここでは 2 GB の /swapfile を作成します。

# Create a 2 GB swap file
fallocate -l 2G /swapfile

# If fallocate fails ("Operation not supported"), use dd instead
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

ステップ3:権限を設定して Swap を有効化する

swap ファイルにはメモリ上の機密データが書き出される可能性があるため、root のみ読み書きできる 600 に設定します。mkswap で swap 形式にし、swapon で即座に有効化すると、free -h の Swap 行に容量が表示されます。

chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
free -h

ステップ4:/etc/fstab に登録して起動時に自動有効化する

swapon の効果は再起動までです。fstab に 1 行追加すると、再起動後も自動で有効になります。編集前に fstab をバックアップしてください。

cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' >> /etc/fstab

ステップ5:swappiness で Swap の使い方を調整する

swappiness(0~100)はカーネルが swap を使う積極度です。サーバーでは物理メモリを優先し、必要なときだけ swap を使うのが望ましいため、10 前後がおすすめです。/etc/sysctl.d/ に設定ファイルを置くと永続化できます。

cat /proc/sys/vm/swappiness      # usually 60 (Debian/Ubuntu) or 30 (some RHEL images)
sysctl vm.swappiness=10          # apply now

# Make it permanent
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf
sysctl --system

ステップ6:Swap ファイルを削除する方法

swap が不要になった場合やサイズを変更したい場合は、無効化して fstab の行を削除し、ファイルを削除します。サイズ変更はステップ2~4 をやり直すだけです。

swapoff /swapfile
sed -i '\|^/swapfile |d' /etc/fstab
rm -f /swapfile
free -h

よくある質問

swapon で「Invalid argument」や「Operation not permitted」と表示されます。

「Invalid argument」は、swap に対応していないファイルシステム上で fallocate を使った場合に多く、dd で作り直せば解決します。「Operation not permitted」はコンテナ型仮想化で swap の追加が許可されていない可能性が高いため、サポートへご確認ください。

Swap は大きいほど良いですか?

いいえ。大きくしても性能は上がらず、ディスクを消費するだけです。頻繁に swap を使うと動作も大きく遅くなります。上の表を目安にし、本当にメモリが足りない場合はプランを変更しましょう。

どのプロセスが Swap を使っているか確認するには?

grep VmSwap /proc/*/status | sort -k2 -n | tail で使用量の多いプロセスを表示できます。htop で SWAP 列を表示する方法もあります。

上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日テクニカルサポートへお問い合わせください。サーバー IP、OS、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より迅速に対応できます。

この回答はお役に立ちましたか?

関連チュートリアル