すべてのプロダクト
Search
ドキュメントセンター

:Linux インスタンスのスワップパーティションの設定

最終更新日:Jun 22, 2026

Alibaba Cloud Elastic Compute Service (ECS) インスタンスの物理メモリが不足した場合、スワップ領域の設定はコスト効率の良い緊急時の解決策です。ディスク領域を仮想メモリとして使用することで、物理メモリが枯渇した際のメモリ不足 (OOM) エラーを防ぎ、システムの稼働を維持します。

重要
  • ECS インスタンスのメモリが不足している場合は、まず インスタンスタイプを変更 して物理メモリを増やすことを推奨します。

  • 基本ディスクは I/O パフォーマンスが低く、システムボトルネックの原因となる可能性があるため、基本ディスク上でのスワップパーティションの使用は推奨しません。他の種類のクラウドディスクについては、ニーズに応じてスワップパーティションを使用できます。ただし、頻繁なスワッピングを避け、システムの安定性を維持するために、適切に設定する必要があります。

方法1:クラウドアシスタントプラグインの使用 (推奨)

重要

スワップパーティションを自動的に設定するには、クラウドアシスタントエージェントをインストールする必要があります。インスタンスがクラウドアシスタントをサポートしていない場合、またはエージェントをインストールできない場合は、方法2 を使用して手動でスワップを設定してください。

スワップパーティションの有効化

  1. ECS インスタンスにログインします。

    1. [ECS コンソール - インスタンス] に移動します。上部メニューで、目的のリージョンとリソースグループを選択します。

    2. 対象インスタンスの詳細ページに移動します。 [Connect] をクリックし、[Workbench] を選択します。 ページ上のプロンプトに従ってターミナルにログインします。

  2. 次のコマンドを実行して、スワップパーティションを有効化します。

    acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --enable

    次の出力は、スワップパーティションが正常に有効化されたことを示します。

    [INFO] The system support auto config swap partition.
    [INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
    [INFO] Turn On Swap......
    [INFO] RAM size: 8 G
    [INFO] Swap size: 8 G
    [INFO] Check disk available size......
    [INFO] Disk available size: 33 G
    [INFO] Disk available size enough
    [INFO] Recover swap configuration from /etc/fstab
    [INFO] Config vm.swappiness=20 to /etc/sysctl.conf
    [SUCCESS] Swap has been turned on.
    説明

    このプラグインは、以下のルールに従ってシステムメモリに基づいてスワップパーティションのサイズを自動的に設定します。

    • RAM ≤ 2 GB の場合、スワップサイズ = RAM × 2。

    • 2 GB < RAM ≤ 8 GB の場合、スワップサイズ = RAM。

    • RAM > 8 GB の場合、スワップパーティションは推奨されません。

    • 利用可能なディスク領域が 5 GB 未満の場合、スワップパーティションは推奨されません。

    vm.swappiness パラメータのデフォルト値は 20 です。スワップパーティションのサイズをカスタマイズするには、「方法2:スワップパーティションの手動設定」を参照してください。

スワップパーティションのステータスの確認

次のコマンドを実行して、スワップパーティションのステータスを確認します。

acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --status

次の出力は、スワップパーティションが有効になっていることを示します。

[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] ========== Swap status ==========
NAME      TYPE SIZE USED PRIO
/swapfile file   8G   0B   -2
[INFO] Swap is enabled

スワップパーティションの無効化

次のコマンドを実行して、スワップパーティションを無効化します。

acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --disable

次の出力は、スワップパーティションが正常に無効化されたことを示します。

[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] Turn Off Swap......
[INFO] Cancel swap configuration from /etc/fstab
[INFO] Config vm.swappiness=0 to /etc/sysctl.conf
[INFO] Deleted swapfile: /swapfile
[SUCCESS] Swap has been turned off.

方法2:手動設定

スワップパーティションの有効化

手順1:現在のスワップステータスの確認

開始する前に、競合を避けるため、システムに既存のスワップ設定がないことを確認してください。

  1. ECS インスタンスにログインします。

    1. [ECS コンソール - インスタンス] に移動します。上部メニューで、目的のリージョンとリソースグループを選択します。

    2. 対象インスタンスの詳細ページに移動します。 [Connect] をクリックし、[Workbench] を選択します。 ページ上のプロンプトに従ってターミナルにログインします。

  2. スワップパーティションの設定を確認します。

    swapon --show
    • コマンドが出力を返さない場合、スワップは設定されていないため、次の手順に進むことができます。

    • 次のような出力が返された場合、アクティブなスワップ領域がすでに存在します。 スワップファイルを無効化してクリーンアップするか、別のディスクに新しいスワップファイルを作成することができます。

      image

手順2:スワップファイルの作成と設定

  1. スワップファイルを作成します。

    この例では、1 GiB の /swapfile を作成する方法を示します。fallocate コマンドの使用を推奨します。このコマンドは即時にファイル領域を割り当てることができ、dd よりもはるかに効率的です。

    # 1 GiBのスワップファイルを作成します
    sudo fallocate -l 1G /swapfile
    ファイルシステム (XFS の初期バージョンなど) が fallocate をサポートしていない場合、システムは fallocate failed: Operation not supported エラーを返します。この場合、代わりに dd コマンドを使用してファイルを作成しますが、このプロセスにはより時間がかかります。
    sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
    • of の値 /swapfile はカスタマイズ可能な変数であり、スワップパーティションの識別子を表し、既存のパーティション識別子と同じにすることはできません。

    • bscount の値はスワップファイルのサイズを決定し、カスタマイズできます。たとえば、bs=1M count=1024 はスワップファイルのサイズを 1 GB に設定します。

  2. 安全なパーミッションを設定します。

    root 以外のユーザーが、パスワードやキーなどの機密データを含む可能性のあるスワップファイルを読み取れないように、そのパーミッションを 600 に設定します。

    sudo chmod 600 /swapfile
  3. ファイルをスワップ領域としてマークします。

    sudo mkswap /swapfile

    成功した場合の応答は次のようになります。

    Setting up swapspace version 1, size = 1 GiB (1073737728 bytes)
    no label, UUID=a1a7e24c-38f6-41a4-9e18-be60b631133a
    : スワップファイルのサイズは 40 KB より大きくする必要があります。そうでない場合、mkswap コマンドはエラーを報告します。

手順3:スワップファイルの有効化と検証

新しく作成したスワップファイルを有効化し、システムがそれを認識していることを確認します。

  1. スワップファイルを有効化します。

    sudo swapon /swapfile
  2. スワップが有効になっていることを確認します。

    swapon --show

    正常に有効化された後の出力は次のとおりです。

    NAME       TYPE SIZE USED PRIO
    /swapfile  file   1G   0B   -2

    または、free -h を実行します。Swap 行に合計サイズが表示されるはずです。

手順4:設定の永続化

インスタンスの再起動後もスワップが有効なままになるように、スワップ設定を /etc/fstab ファイルに書き込みます。

  1. (推奨) 操作ミスを防ぐために、fstab ファイルをバックアップします。

    sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
  2. スワップ設定を fstab ファイルに追加します。

    次のコマンドは、重複を防ぐために、新しいエントリを追加する前に既存のスワップエントリをチェックします。
    SWAP_FILE_PATH="/swapfile"
    if ! grep -q "swap" /etc/fstab; then
        echo "${SWAP_FILE_PATH} none swap sw 0 0" | sudo tee -a /etc/fstab
    else
        echo "Swap entry already exists in /etc/fstab. No changes made."
    fi
  3. 永続化の設定を検証します。

    インスタンスを再起動せずに、/etc/fstab の設定が正しいことを確認できます。

    # 1. すべてのスワップを無効化
    sudo swapoff -a
    # 2. /etc/fstabファイルに基づいてすべてのスワップパーティションを再マウント
    sudo swapon -a
    # 3. スワップが期待どおりに再マウントされたかを確認
    swapon --show

    コマンドがスワップ情報を正しく出力した場合、永続化の設定は成功です。

swappiness の調整

swappiness は、システムがどの程度積極的にスワップを使用するかを制御する Linux カーネルパラメータです。値の範囲は 0 から 100 です。

  • 高い値:カーネルはより積極的にスワップを使用し、非アクティブなメモリページをより早期にディスクに移動します。

  • 低い値:カーネルはスワップの使用を避け、ページを物理メモリに保持することを優先し、物理メモリが危機的に低い場合にのみスワップを使用します。

重要

スワップパラメータの調整には注意が必要です。不適切な変更は、システムのパフォーマンスを低下させたり、予期しない仮想メモリの動作を引き起こす可能性があります。特定のワークロードで必要であり、かつパラメータの機能を完全に理解している場合にのみ変更を行ってください。不明な場合は、デフォルト設定を維持してください。

シナリオ別の推奨事項:

適用シナリオ

推奨 swappiness

理由

データベース (MySQL, PostgreSQL)

1~10

クエリのパフォーマンスを確保するため、コアとなるバッファプールがスワップアウトされるのを避けます。

インメモリデータベース (Redis, Memcached)

1

インメモリデータベースはレイテンシーに非常に敏感です。スワップが発生すると、パフォーマンスが著しく低下する可能性があります。値が 1 の場合、スワップは絶対に必要な場合にのみ使用されることを意味します。

Web アプリケーションサーバー (Nginx, Apache)

10~60

重要度の低い非アクティブなプロセスページをスワップアウトできるようにすることで、応答速度とメモリ使用率のバランスを取ります。

デフォルト/汎用/バッチワークロード

60 (システムデフォルト)

ほとんどの汎用シナリオに適しています。システムが非アクティブなプロセスをスワップアウトして、アクティブなタスクのために物理メモリを解放できるようにします。

手順:

  1. /etc/sysctl.conf ファイルを編集します。たとえば、物理メモリが 10% 未満の場合にのみスワップパーティションを使用するには、次のパラメータ値を調整する必要があります。

    vm.swappiness=10
  2. ファイルを保存して終了します。次に、次のコマンドを実行して設定を適用します。

    sudo sysctl -p
  3. swappiness パラメータの設定が有効になったことを確認します。

    cat /proc/sys/vm/swappiness

    次の出力は、swappiness パラメータの設定が有効になったことを示します。

    image

スワップ使用量の監視

監視目的

推奨コマンド

説明

全体的なメモリとスワップの使用状況の表示

free -h

最も一般的で簡単なコマンドです。

リアルタイムのスワップアクティビティ (スワップイン/スワップアウト) の監視

vmstat 1

si (スワップイン) と so (スワップアウト) の列に注意してください。これらの 2 つの列が長期間にわたってゼロ以外の値を示す場合、システムが頻繁にスワップ操作を実行しており、パフォーマンスに問題がある可能性があります。

スワップを使用しているプロセスの特定

for file in /proc/*/status; do awk '/Name:/{n=$2} /VmSwap:/{s=$2} END{if(s>0) printf "%-20s %s\n", n, s"kB"}' $file; done | sort -k2 -hr

このコマンドは、すべてのプロセスを反復処理し、各プロセスの名前とスワップ使用量をリストアップし、結果をソートしてスワップ使用量が最も高いプロセスを一番上に表示します。

過去のパフォーマンスの分析

atop

atop は、過去のリソース使用量を記録できる強力なパフォーマンス監視ツールです。システムが遅くなった場合、atop のログを使用して、問題が発生した時点のプロセスとリソースの状態をさかのぼって確認できます。

スワップの無効化とクリーンアップ

スワップファイルが不要になった場合は、安全に無効化し、ファイルを削除してディスク領域を解放します。

  1. 指定されたスワップファイルを無効化します。

    sudo swapoff /swapfile
  2. fstab から自動マウント設定を削除します。sed コマンドを使用して対応する行を安全に削除し、手動編集によるエラーを回避します。

    sudo sed -i '\|/swapfile|d' /etc/fstab
  3. スワップファイルを削除してディスク領域を解放します。

    sudo rm /swapfile
  4. スワップが完全に無効化されたことを確認します。

    swapon --show または free -h を実行して、スワップ情報が消えていることを確認します。

よくある質問

スワップが期待どおりに動作しないのはなぜですか?

スワップパーティションを作成し、swappiness パラメータを調整した後、不可解な現象に気づくことがあります。物理メモリに高い負荷がかかっているにもかかわらず、スワップパーティションの使用率が低いままであり、swappiness の設定が有効になっていないように見えることがあります。

問題の診断

この問題の根本原因は、最新の Linux ディストリビューションで広く使用されている systemdコントロールグループ (Cgroup) のメカニズムにあります。

  1. Cgroup 固有のルール:デフォルトの cgroup v1 モードでは、systemd はシステムサービス (system.slice) やユーザーセッション (user.slice) などのコンポーネントに対して個別の cgroup を作成します。各 cgroup は、memory.swappiness のような独自のリソース制御パラメータを持つことができます。

  2. ローカル設定がグローバル設定を上書きする:systemd がこれらの cgroup を初期化する際、デフォルトの memory.swappiness 値 (通常は 60) を設定します。この cgroup 固有の設定は、/etc/sysctl.conf で設定されたグローバルな vm.swappiness よりも優先されます。

  3. 結果:実行中のプログラムは、実際にはグローバルなルールではなく、その cgroup の swappiness ルールに従うため、グローバルな設定は無効になります。

クイック検証
  1. 実行中のプロセスの PID を見つけます (例:pidof nginx)。

  2. プロセスが属する cgroup を確認します。

    cat /proc/[PID]/cgroup

    /system.slice/nginx.service のようなパスが表示されます。

  3. この cgroup の実際の swappiness 値を確認します。

    cat /sys/fs/cgroup/memory/system.slice/nginx.service/memory.swappiness

    グローバルな vm.swappiness を別の値に設定していても、出力が 60 である可能性が高いです。これは、グローバルな設定が有効になっていないことを示します。

解決策

解決策1:cgroup v2 への切り替え (推奨)

原則: cgroup v2 は v1 の多くの設計上の問題を修正し、統一された階層構造を使用します。v2 モードでは、子 cgroup はデフォルトで親ノードの設定を継承します。グローバルな vm.swappiness を設定するだけで、この設定はシステムのすべてのプロセスに自動的かつ均一に適用されます。

手順

  1. カーネルブートパラメーターの更新:
    grubby ツールを使用して、すべてのカーネルに systemd.unified_cgroup_hierarchy=1 パラメーターを追加して cgroup v2 を有効にします。







    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
    注意:このコマンドによる変更は永続的です。GRUB のブート設定を変更するため、次回の起動時にシステムは cgroup v2 モードで初期化されます。
  2. ECS インスタンスの再起動:
    この設定はカーネルレベルのパラメータであり、有効化するには再起動が必要です。







    sudo reboot
  3. 検証と設定:

    • 確認: 再起動後、mount | grep cgroup を実行します。タイプ cgroup2 のマウントポイントが表示された場合、cgroup v2 への切り替えに成功したことを示します。

    • 設定: /etc/sysctl.conf で目的の vm.swappiness 値を設定し、sudo sysctl -p を実行してシステム全体に設定を適用します。

解決策2:cgroup v1 での永続化設定 (代替案)

お使いの環境が特定の理由 (たとえば、cgroup v2 と互換性のない古いコンテナソフトウェアを実行しているなど) で切り替えられない場合は、systemd drop-in 設定を使用して問題を解決できます。

原則: この方法は、障害が発生する可能性のあるグローバル設定に依存するのではなく、コア slice を作成するときに、指定された swappiness 値を使用するように systemd に直接指示します。

手順:

  1. system.slice 用のオーバーライド設定を作成します (これはすべてのシステムサービスに影響します):

    60 を希望の swappiness 値に置き換えます。

    sudo mkdir -p /etc/systemd/system/system.slice.d/
    sudo tee /etc/systemd/system/system.slice.d/99-swappiness.conf <<'EOF'
    [Slice]
    MemorySwappiness=60
    EOF
  2. user.slice のオーバーライド設定を作成します(これはすべてのユーザーログインセッションに影響します)。

    60 を目的の swappiness 値に置き換えます。

    sudo mkdir -p /etc/systemd/system/user.slice.d/
    sudo tee /etc/systemd/system/user.slice.d/99-swappiness.conf <<'EOF'
    [Slice]
    MemorySwappiness=60
    EOF
  3. 設定を適用します。

    sudo systemctl daemon-reload
    sudo reboot
    daemon-reloadsystemd の設定のみをリロードします。すべてのサービスとセッションが新しい Slice 設定で作成されるようにするには、サーバーを再起動する必要があります。