Start typing to search across invoices, services, domains, tickets, and more...
メモリの少ない VPS では、ソフトウェアのビルド、データベースの稼働、急なアクセス増加などでメモリが枯渇し、OOM キラーによって MySQL などのプロセスが強制終了されることがあります。Linux に Swap(仮想メモリ)を追加しておくと、メモリ不足時にあまり使われないデータをディスクへ退避でき、安全なバッファになります。本記事では swap ファイルの作成、起動時の自動有効化、swappiness の調整方法を紹介します。Debian/Ubuntu と CentOS/Rocky/AlmaLinux の KVM VPS・専用サーバーに対応しています。
free -h でメモリと既存の swap を、swapon --show で swap が有効か、df -h でルートパーティションに十分な空きがあるかを確認します。swap サイズの目安は次のとおりです。
| 物理メモリ | 推奨 Swap |
|---|---|
| 1 GB 以下 | 1~2 GB |
| 2~4 GB | 2 GB |
| 8 GB 以上 | 2~4 GB(必要に応じて) |
free -h
swapon --show
df -h /
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
swap ファイルにはメモリ上の機密データが書き出される可能性があるため、root のみ読み書きできる 600 に設定します。mkswap で swap 形式にし、swapon で即座に有効化すると、free -h の Swap 行に容量が表示されます。
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
free -h
swapon の効果は再起動までです。fstab に 1 行追加すると、再起動後も自動で有効になります。編集前に fstab をバックアップしてください。
cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' >> /etc/fstab
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
swap が不要になった場合やサイズを変更したい場合は、無効化して fstab の行を削除し、ファイルを削除します。サイズ変更はステップ2~4 をやり直すだけです。
swapoff /swapfile
sed -i '\|^/swapfile |d' /etc/fstab
rm -f /swapfile
free -h
「Invalid argument」は、swap に対応していないファイルシステム上で fallocate を使った場合に多く、dd で作り直せば解決します。「Operation not permitted」はコンテナ型仮想化で swap の追加が許可されていない可能性が高いため、サポートへご確認ください。
いいえ。大きくしても性能は上がらず、ディスクを消費するだけです。頻繁に swap を使うと動作も大きく遅くなります。上の表を目安にし、本当にメモリが足りない場合はプランを変更しましょう。
grep VmSwap /proc/*/status | sort -k2 -n | tail で使用量の多いプロセスを表示できます。htop で SWAP 列を表示する方法もあります。
上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日テクニカルサポートへお問い合わせください。サーバー IP、OS、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より迅速に対応できます。