Ubuntuのスワップ領域を設定・拡張する方法

システム管理

「メモリが足りなくてサーバーがクラッシュした」「Cannot allocate memory というエラーが出た」——そんな経験がある方にとって、スワップ領域はUbuntuを安定運用するための保険です。VPS(1〜2GB RAMプラン)や自宅の古いPCでは特に重要になります。

結論からいうと、スワップ領域の作成は 4つのコマンド(fallocate・chmod・mkswap・swapon)で完結します。本記事では Ubuntu 24.04 LTS の Docker公式イメージで実際にコマンドを実行し、その実出力をもとに手順を解説します。

この記事のポイント

  • スワップ確認は free -hswapon --show の2コマンドで一発
  • スワップファイル作成は fallocate → chmod 600 → mkswap → swapon の4ステップ
  • /etc/fstab に1行追記すれば再起動後も自動でスワップが有効になる
  • vm.swappiness(デフォルト60)を下げるとVPSの応答性が改善する場合がある
  • Ubuntu 22.04・24.04 どちらも util-linux に同梱されており、追加インストール不要

動作確認環境

本記事のコマンドは Ubuntu 24.04 LTS(Noble Numbat) の Docker公式イメージ(ubuntu:24.04)で実行・確認しています。Ubuntu 22.04 でも同じ手順が使えますが、util-linux のバージョンが異なります(後述)。

スワップ領域とは

スワップ(swap)とは、物理メモリ(RAM)が足りなくなったときにディスクの一部をメモリの代わりとして使う仕組みです。Windowsの「仮想メモリ」と同じ概念です。

ディスクはRAMより何百倍も遅いため、スワップに頼りすぎるとシステムが極端に重くなります。あくまで「OOM(Out Of Memory)キラーによるプロセス強制終了を防ぐための緊急バッファ」として使うのが正しい使い方です。

Ubuntuのスワップには2つの形式があります:

種類 概要 推奨場面
スワップファイル 通常のファイルとしてディスク上に作成 VPS・後から追加・初学者向け
スワップパーティション 専用パーティションを切る インストール時に設計・デスクトップLinux

VPSや後から設定する場合はスワップファイル一択です。パーティション変更は不要で、ファイルを作るだけでOKです。

現在のスワップ状態を確認する

まず今のスワップ状況を確認します。3つのコマンドで把握できます。

free -h・swapon --show・/proc/swaps の実行結果(Ubuntu 24.04実測)
free -h・swapon –show・/proc/swaps の実行結果(Ubuntu 24.04実測)



ubuntu@linuxlab: ~
$ free -h
total used free shared buff/cache available
Mem: 11Gi 1.3Gi 6.8Gi 333Mi 4.1Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi

Swap: の行を見ます。total が 0B ならスワップが未設定です。上の出力では 2.0Gi が設定済みで 0B しか使っていない状態です。




ubuntu@linuxlab: ~
$ swapon –show
NAME TYPE SIZE USED PRIO
/swap file 2G 0B -2
$ cat /proc/swaps
Filename Type Size Used Priority
/swap file 2097148 0 -2

swapon --show は現在有効なスワップの一覧を表示します。何も表示されなければスワップが無効です。/proc/swaps も同じ情報をカーネルから直接取得します。

スワップファイルを新規作成する

スワップが未設定の場合、または容量を増やしたい場合に手順を踏みます。rootまたは sudo が必要です。

手順1:スワップファイルを作成する

fallocate コマンドで指定サイズのファイルを即座に作成します。Ubuntu 24.04 では util-linux 2.39.3 に同梱されているため、追加インストール不要です。




root@linuxlab: ~
$ fallocate -l 2G /swapfile
$ ls -lh /swapfile
-rw-r–r– 1 root root 2.0G Jun 13 09:53 /swapfile

-l 2G でサイズを指定します。VPSの物理RAMと同量〜2倍が目安です(1GB RAMなら 1G〜2G)。

fallocate が使えない場合

一部のファイルシステム(btrfs等)では fallocate がスワップファイルに非対応の場合があります。その場合は dd if=/dev/zero of=/swapfile bs=1M count=2048 で代替できます(2048 = 2GB)。ただし dd は時間がかかります。

手順2:パーミッションを設定する

スワップファイルは root だけが読み書きできるように設定します。これはセキュリティ上の必須手順です。




root@linuxlab: ~
$ chmod 600 /swapfile
$ ls -lh /swapfile
-rw——- 1 root root 2.0G Jun 13 09:53 /swapfile

-rw------- と表示されれば正しく設定できています。chmod 600 を忘れると、mkswapswapon の後工程で警告が出る場合があります。

手順3:mkswap でスワップ領域として初期化する




root@linuxlab: ~
$ mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=f1d8751e-4f56-4ff7-a913-1624511d4bf3

実際に実行すると上のような出力が返ってきました。UUID が自動で付与されます(この値は環境によって異なります)。

手順4:swapon でスワップを有効化する

スワップファイル作成の全手順(fallocate→mkswap→swapon)実行ログ
スワップファイル作成の全手順(fallocate→mkswap→swapon)実行ログ



root@linuxlab: ~
$ swapon /swapfile
$ swapon –show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
$ free -h
total used free shared buff/cache available
Mem: 11Gi 1.4Gi 6.4Gi 334Mi 4.4Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi

free -hSwap: 行に 2.0Gi が表示されれば成功です。この時点でスワップは有効ですが、このままでは再起動すると設定がリセットされます。

スワップを再起動後も有効にする(永続化)

/etc/fstab にスワップファイルのエントリを追加することで、再起動後も自動的にスワップが有効になります。

/etc/fstab にスワップを追記して永続化する手順
/etc/fstab にスワップを追記して永続化する手順



root@linuxlab: ~
$ echo ‘/swapfile none swap sw 0 0’ >> /etc/fstab
$ grep swap /etc/fstab
/swapfile none swap sw 0 0

/etc/fstab の書式は「デバイス・マウント先・タイプ・オプション・dump・fsck」の6フィールドです。スワップの場合はマウント先が none、タイプが swap、オプションが sw です。

注意:echo で追記する際の向きに注意

>>(追記)と >(上書き)を間違えると /etc/fstab が上書きされてシステムが起動しなくなる可能性があります。>>(右向き不等号2個)であることを必ず確認してください。

設定後、再起動せずに即時有効化したい場合は以下のコマンドを実行します:




root@linuxlab: ~
$ swapon -a
$ swapon –show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2

swappiness を調整する(VPS向け最適化)

vm.swappiness は「どのくらい積極的にスワップを使うか」を 0〜100 で指定するカーネルパラメータです。デフォルトは 60(Ubuntu 24.04 実測)。

swappiness の確認と変更手順(Ubuntu 24.04実測)
swappiness の確認と変更手順(Ubuntu 24.04実測)



root@linuxlab: ~
$ cat /proc/sys/vm/swappiness
60

VPS(メモリが少ない環境)では swappiness を下げておくと、RAMに余裕があるのにスワップを使い始めるという事態を防げます。一般的には 10 前後に設定するのがおすすめです。

手順1:一時的に変更する(再起動で元に戻る)




root@linuxlab: ~
$ sysctl vm.swappiness=10
vm.swappiness = 10
$ cat /proc/sys/vm/swappiness
10

手順2:永続化する(再起動後も有効)




root@linuxlab: ~
$ echo ‘vm.swappiness=10’ >> /etc/sysctl.conf
$ grep swappiness /etc/sysctl.conf
vm.swappiness=10
$ sysctl -p
vm.swappiness = 10

sysctl -p/etc/sysctl.conf の設定を即時反映できます。

著者アイコン
著者アイコン

1GBや2GBのVPSを使っている方は swappiness=10 にしておくのがおすすめです。デフォルトの60は「RAMがまだ40%空いていてもスワップを使い始める」設定なので、応答が遅くなりがちです。

Ubuntu 22.04 vs 24.04 の違い

スワップ関連コマンドは util-linux パッケージに含まれており、バージョンが異なります。

Ubuntu 22.04 vs 24.04 スワップ関連コマンドバージョン比較(実測)
Ubuntu 22.04 vs 24.04 スワップ関連コマンドバージョン比較(実測)
項目 Ubuntu 22.04 LTS Ubuntu 24.04 LTS
util-linux バージョン 2.37.2 2.39.3
swapon バージョン 2.37.2(同梱) 2.39.3(同梱)
mkswap バージョン 2.37.2(同梱) 2.39.3(同梱)
fallocate 対応 あり(追加不要) あり(追加不要)
swappiness デフォルト 60 60

コマンドの使い方・オプションに実質的な違いはなく、どちらのバージョンでも同じ手順が使えます(Ubuntu 24.04 で実測済み)。

スワップを削除・無効化する

スワップを削除したい場合は、有効化と逆の手順で行います。




root@linuxlab: ~
$ swapoff /swapfile
$ rm /swapfile
$ nano /etc/fstab
(/swapfile の行を削除して保存)

注意

スワップを無効化する前に、現在スワップを使用中のプロセスがいないか swapon --show の USED 列で確認してください。使用中のスワップを強制的に無効化するとプロセスが落ちる場合があります。

よくあるエラーと解決策

①「swapon: /swapfile: insecure permissions 0644, 0640 suggested.」

原因:chmod 600 を忘れてスワップファイルのパーミッションが緩い場合に出ます。




root@linuxlab: ~
$ chmod 600 /swapfile
$ swapon /swapfile

②「fallocate: fallocate failed: Operation not supported」

原因:btrfs や NFS など一部のファイルシステムで fallocate がスワップに非対応。

解決策:dd コマンドで代替します(容量分の書き込みが発生するため時間がかかります):




root@linuxlab: ~
$ dd if=/dev/zero of=/swapfile bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, X.X s, XXX MB/s

③「swapon: /swapfile: read swap header failed.」

原因:mkswap を実行せずに swapon を実行した場合に出ます。必ず mkswapswapon の順で実行してください。

④スワップを使い切ってシステムが重い

スワップを使い切っている場合(free -h の Swap: USED が total に近い値)は、RAMの増設か、不要なプロセスの停止を検討してください。スワップを増やしてもRAMの代わりにはならず、速度が改善しないことがほとんどです。

まとめ

Ubuntu のスワップ設定は以下の手順でまとめられます:

  1. 確認:free -h / swapon --show
  2. 作成:fallocate -l 2G /swapfilechmod 600mkswapswapon
  3. 永続化:/etc/fstab/swapfile none swap sw 0 0 を追記
  4. 最適化:vm.swappiness=10/etc/sysctl.conf に追記

VPSで Ubuntu を運用するなら、スワップ設定は初期セットアップの一部として最初に済ませておくのがおすすめです。Vultr や DigitalOcean の最安プラン(1GB RAM)でも、2GBのスワップを設定すれば突発的なメモリ不足によるクラッシュを大幅に減らせます。

VPS選びからサーバー初期設定まで詳しく知りたい方は、VPS比較記事も参考にしてください:

コメント

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