序章

アプリケーションのメモリ不足エラーを防ぐ最も簡単な方法の1つは、サーバーにスワップスペースを追加することです。 このガイドでは、Debian10サーバーにスワップファイルを追加する方法について説明します。

警告:従来の回転式ハードドライブを使用するシステムでは一般にスワップが推奨されますが、SSDでスワップを使用すると、時間の経過とともにハードウェアの劣化の問題が発生する可能性があります。 この考慮事項のため、DigitalOceanまたはSSDストレージを使用するその他のプロバイダーでスワップを有効にすることはお勧めしません。 そうすることは、あなたとあなたの隣人のための基礎となるハードウェアの信頼性に影響を与える可能性があります。 このガイドは、他の場所で回転ディスクシステムを使用している可能性のあるユーザー向けのリファレンスとして提供されています。

DigitalOceanでサーバーのパフォーマンスを向上させる必要がある場合は、Dropletをアップグレードすることをお勧めします。 これにより、一般的に良い結果が得られ、サービスに影響を与える可能性のあるハードウェアの問題に寄与する可能性が低くなります。

スワップとは何ですか?

Swap は、オペレーティングシステムがRAMに保持できなくなったデータを一時的に保存できる場所として指定されたハードドライブ上の領域です。 基本的に、これにより、サーバーが作業中の「メモリ」に保持できる情報の量を増やすことができますが、いくつかの注意点があります。 ハードドライブのスワップスペースは、主に、使用中のアプリケーションデータを保持するのに十分なスペースがRAMになくなったときに使用されます。

ディスクに書き込まれる情報は、RAMに保持される情報よりも大幅に遅くなりますが、オペレーティングシステムは、アプリケーションデータをメモリに実行し続け、古いデータのスワップを使用することを好みます。 全体として、システムのRAMが使い果たされた場合のフォールバックとしてスワップスペースを用意することは、SSD以外のストレージが使用可能なシステムでのメモリ不足の例外に対する優れたセーフティネットになります。

ステップ1-システムのスワップ情報を確認する

始める前に、システムにすでに使用可能なスワップスペースがあるかどうかを確認できます。 複数のスワップファイルまたはスワップパーティションを持つことは可能ですが、通常は1つで十分です。

次のように入力すると、システムにスワップが構成されているかどうかを確認できます。

  1. sudo swapon --show

出力が返されない場合は、システムに現在使用可能なスワップスペースがないことを意味します。

を使用して、アクティブなスワップがないことを確認できます。 free 効用:

  1. free -h
Output
total used free shared buff/cache available Mem: 990Mi 36Mi 863Mi 4.0Mi 89Mi 837Mi Swap: 0B 0B 0B

出力のSwap行に示されているように、システムでアクティブなスワップはありません。

ステップ2–ハードドライブパーティションの使用可能なスペースを確認する

スワップファイルを作成する前に、現在のディスク使用量をチェックして、十分なスペースがあることを確認します。 次のように入力してこれを行います。

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 488M 0 488M 0% /dev tmpfs 100M 4.5M 96M 5% /run /dev/vda1 25G 989M 23G 5% / tmpfs 499M 0 499M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 499M 0 499M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1001

とデバイス / の中に Mounted on この場合、列はディスクです。 この例では十分なスペースがあります(1.4Gのみを使用)。 使用法はおそらく異なります。

スワップスペースの適切なサイズについては多くの意見がありますが、それは実際には個人的な好みやアプリケーションの要件によって異なります。 一般に、システムのRAMの量と同じか2倍の量が出発点として適しています。 もう1つの経験則は、RAMフォールバックとして使用している場合は、4Gを超えるスワップはおそらく不要であるということです。

ステップ3–スワップファイルを作成する

使用可能なハードドライブの空き容量がわかったので、ファイルシステムにスワップファイルを作成できます。 呼び出したいスワップサイズのファイルを割り当てます swapfile ルート(/)ディレクトリにあります。

スワップファイルを作成する最良の方法は、 fallocate プログラム。 このコマンドは、指定されたサイズのファイルを即座に作成します。

この例のサーバーには1GのRAMがあるため、このガイドでは1Gファイルを作成します。 独自のサーバーのニーズに合わせてこれを調整します。

  1. sudo fallocate -l 1G /swapfile

次のように入力すると、正しい容量のスペースが予約されていることを確認できます。

  1. ls -lh /swapfile
Output
-rw-r--r-- 1 root root 1.0G May 29 17:34 /swapfile

私たちのファイルは、適切な量のスペースを確保して作成されています。

ステップ4–スワップファイルを有効にする

正しいサイズのファイルが利用できるようになったので、これを実際にスワップスペースに変換する必要があります。

まず、 root 権限を持つユーザーのみがコンテンツを読み取ることができるように、ファイルのアクセス許可をロックダウンする必要があります。 これにより、通常のユーザーがファイルにアクセスできなくなり、セキュリティに重大な影響を及ぼします。

次のように入力して、rootのみがファイルにアクセスできるようにします。

  1. sudo chmod 600 /swapfile

次のように入力して、権限が変更されたことを確認します。

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G May 29 17:34 /swapfile

ご覧のとおり、rootユーザーのみが読み取りフラグと書き込みフラグを有効にしています。

次のように入力して、ファイルをスワップスペースとしてマークできます。

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=b591444e-c12b-45a6-90fc-e8b24c67c006f

ファイルにマークを付けたら、スワップファイルを有効にして、システムで使用を開始できるようにします。

  1. sudo swapon /swapfile

次のように入力して、スワップが使用可能であることを確認します。

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

の出力を確認できます free 私たちの調査結果を裏付けるためのユーティリティ:

  1. free -h
Output
total used free shared buff/cache available Mem: 990Mi 37Mi 860Mi 4.0Mi 92Mi 834Mi Swap: 1.0Gi 0B 1.0Gi

スワップは正常にセットアップされ、オペレーティングシステムは必要に応じてスワップを使用し始めます。

ステップ5–スワップファイルを永続的にする

最近の変更により、現在のセッションのスワップファイルが有効になりました。 ただし、再起動すると、サーバーはスワップ設定を自動的に保持しません。 スワップファイルをに追加することでこれを変更できます /etc/fstab ファイル。

バックアップする /etc/fstab 何かがうまくいかない場合に備えてファイル:

  1. sudo cp /etc/fstab /etc/fstab.bak

スワップファイル情報を最後に追加します /etc/fstab 次のように入力してファイルを作成します。

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

次に、スワップスペースを調整するために更新できるいくつかの設定を確認します。

ステップ6–スワップ設定の調整

スワップを処理するときにシステムのパフォーマンスに影響を与えるように構成できるオプションがいくつかあります。

Swappinessプロパティの調整

The swappiness パラメータは、システムがRAMからスワップスペースにデータをスワップする頻度を設定します。 これは、パーセンテージを表す0〜100の値です。

値がゼロに近い場合、どうしても必要な場合を除いて、カーネルはデータをディスクにスワップしません。 スワップファイルとのやり取りは、RAMとのやり取りよりもはるかに時間がかかり、パフォーマンスが大幅に低下する可能性があるという点で「高価」であることを忘れないでください。 スワップにあまり依存しないようにシステムに指示すると、通常、システムが高速になります。

100に近い値は、より多くのRAMスペースを解放するために、より多くのデータをスワップに入れようとします。 アプリケーションのメモリプロファイルまたはサーバーの使用目的によっては、これが優れている場合があります。

次のように入力すると、現在のswappiness値を確認できます。

  1. cat /proc/sys/vm/swappiness
Output
60

デスクトップの場合、60のswappiness設定は悪い値ではありません。 サーバーの場合は、サーバーを0に近づけることができます。

を使用して、swappinessを別の値に設定できます sysctl 指図。

たとえば、swappinessを10に設定するには、次のように入力します。

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

この設定は、次の再起動まで保持されます。 この値は、再起動時に行を追加することで自動的に設定できます。 /etc/sysctl.conf ファイル:

  1. sudo nano /etc/sysctl.conf

下部に、次を追加できます。

/etc/sysctl.conf
vm.swappiness=10

終了したら、ファイルを保存して閉じます。

キャッシュ圧力設定の調整

変更する可能性のあるもう1つの関連する値は、 vfs_cache_pressure. この設定は、システムがiノードおよびdentry情報を他のデータにキャッシュするために選択する量を構成します。

基本的に、これはファイルシステムに関するアクセスデータです。 これは通常、検索に非常にコストがかかり、頻繁に要求されるため、システムがキャッシュするのに最適です。 クエリを実行すると、現在の値を確認できます。 proc 再びファイルシステム:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

現在構成されているため、システムはiノード情報をキャッシュからすばやく削除します。 次のように入力することで、これを50などのより保守的な設定に設定できます。

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

繰り返しますが、これは現在のセッションでのみ有効です。 swappiness設定で行ったように、構成ファイルに追加することで、これを変更できます。

  1. sudo nano /etc/sysctl.conf

下部に、新しい値を指定する行を追加します。

/etc/sysctl.conf
vm.vfs_cache_pressure=50

終了したら、ファイルを保存して閉じます。

結論

このガイドの手順に従うと、メモリ不足の例外が発生する可能性がある場合に備えて、ある程度の余裕ができます。 スワップスペースは、これらの一般的な問題のいくつかを回避するのに非常に役立ちます。

OOM(メモリ不足)エラーが発生した場合、またはシステムが必要なアプリケーションを使用できない場合、最善の解決策は、アプリケーション構成を最適化するか、サーバーをアップグレードすることです。