序章

サーバーの応答性を高め、アプリケーションのメモリ不足エラーを防ぐ最も簡単な方法の1つは、スワップスペースを追加することです。 Swap は、オペレーティングシステムがRAMに保持できなくなったデータを一時的に保存できる場所として指定されたハードドライブ上の領域です。

基本的に、これにより、サーバーが作業中の「メモリ」に保持できる情報の量を増やすことができますが、いくつかの注意点があります。 ハードドライブのスペースは、主にRAMのスペースがデータに十分でなくなったときに使用されます。

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

このガイドでは、Ubuntu14.04サーバーでスワップファイルを作成して有効にする方法について説明します。

ノート

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

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

スワップ情報についてシステムを確認してください

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

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

sudo swapon -s

Filename				Type		Size	Used	Priority

上に示したように、テーブルのヘッダーのみが返される場合は、現在、スワップスペースが有効になっていません。

スワップスペースをチェックするもう1つのより一般的な方法は、freeユーティリティを使用することです。これにより、システムのメモリ使用量が表示されます。 次のように入力すると、現在のメモリとスワップの使用量をメガバイト単位で確認できます。

無料-m
 キャッシュされた使用済みの空き共有バッファの合計Mem:3953 154 3799 0 8 83-/ + buffers / cache:62 3890 Swap:0 0 0

上記のように、システム内の合計スワップスペースは「0」です。 これは、前のコマンドで見たものと一致します。

ハードドライブパーティションの使用可能なスペースを確認してください

スワップ用のスペースを割り当てる一般的な方法は、タスク専用の別のパーティションを使用することです。 ただし、パーティションスキームの変更が常に可能であるとは限りません。 既存のパーティションに存在するスワップファイルを同じように簡単に作成できます。

これを行う前に、現在のディスク使用量を知っておく必要があります。 次のように入力すると、この情報を取得できます。

 df -h
 使用されるファイルシステムのサイズ使用率使用率/dev/ vda 59G 1.3G 55G 3%/なし4.0K 0 4.0K 0%/ sys / fs / cgroup udev 2.0G 12K 2.0G 1%/ dev tmpfs 396M 312K 396M 1%/ run none 5.0M 0 5.0M 0%/ run / lock none 2.0G 0 2.0G 0%/ run / shm none 100M 0 100M 0%/ run / user

最初の行でわかるように、ハードドライブのパーティションには55ギガバイトが使用可能であるため、処理するための膨大なスペースがあります。 ただし、これは新しい中規模のVPSインスタンスであるため、実際の使用法は大きく異なる場合があります。

スワップスペースの適切なサイズについては多くの意見がありますが、それは実際には個人の好みやアプリケーションの要件によって異なります。 一般に、システムのRAMの量と同じか2倍の量が出発点として適しています。

私のシステムには4ギガバイトのRAMがあり、それを2倍にすると、手放したくないディスクスペースのかなりの部分が必要になるため、システムのRAMに合わせて4ギガバイトのスワップスペースを作成します。

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

使用可能なハードドライブの空き容量がわかったので、ファイルシステム内にスワップファイルを作成します。

ルート(/)ディレクトリにswapfileというファイルを作成します。 ファイルは、スワップファイルに必要な容量を割り当てる必要があります。 これを行うには、主に2つの方法があります。

伝統的なスローウェイ

従来は、ddコマンドを使用して、事前に割り当てられたスペースを持つファイルを作成していました。 この用途の広いディスクユーティリティは、ある場所から別の場所に書き込みます。

これを使用して、/dev/zeroにあるLinuxシステムの特別なデバイスからファイルにゼロを書き込むことができます。このデバイスは、要求された数のゼロを吐き出します。

ブロックサイズはbs、ブロック数はcountを組み合わせて、ファイルサイズを指定します。 各パラメータに割り当てるものは、ほぼ完全に任意です。 重要なのは、それらを掛け合わせた結果がどうなるかということです。

たとえば、この例では、4ギガバイトのファイルを作成しようとしています。 これを行うには、1ギガバイトのブロックサイズと4のカウントを指定します。

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s

of(出力ファイルを表す)を間違った場所に向けるとデータが破壊される可能性があるため、Enterキーを押す前にコマンドを確認してください。

次のように入力すると、4ギガバイトが割り当てられていることがわかります。

 ls -lh / swapfile
  -rw-r–r--1ルートルート4.0G 4月28日17:15/ swapfile

上記のコマンドを完了すると、かなり時間がかかったことに気付くかもしれません。 実際、出力では、システムがファイルを作成するのに18秒かかったことがわかります。 これは、4ギガバイトのゼロをディスクに書き込む必要があるためです。

ファイルをより速く作成する方法を学びたい場合は、ファイルを削除して以下に従ってください。

sudo rm /swapfile

より速い方法

同じファイルを取得するより簡単な方法は、fallocateプログラムを使用することです。 このコマンドは、実際にダミーの内容を書き込むことなく、事前に割り当てられたサイズのファイルを即座に作成します。

次のように入力して、4ギガバイトのファイルを作成できます。

sudo fallocate -l 4G /swapfile

プロンプトはほぼすぐに返されます。 次のように入力すると、正しい容量のスペースが予約されていることを確認できます。

 ls -lh / swapfile
  -rw-r–r--1ルートルート4.0G 4月28日17:19/ swapfile

ご覧のとおり、ファイルは適切な量のスペースを確保して作成されています。

スワップファイルの有効化

現在、ファイルは作成されていますが、システムはこれがスワップに使用されることになっていることを認識していません。 このファイルをスワップとしてフォーマットしてから有効にするようにシステムに指示する必要があります。

ただし、その前に、root以外の人が読み取れないように、ファイルのアクセス許可を調整する必要があります。 他のユーザーにこのファイルの読み取りまたは書き込みを許可すると、セキュリティ上の大きなリスクになります。 次のように入力して、権限をロックダウンできます。

sudo chmod 600 /swapfile

次のように入力して、ファイルに正しい権限があることを確認します。

 ls -lh / swapfile
  -rw------- 1ルートルート4.0G4月28日17:19/swapfile

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

ファイルの安全性が向上したので、次のように入力して、スワップスペースを設定するようにシステムに指示できます。

sudo mkswap /swapfile

Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944

これで、ファイルをスワップスペースとして使用する準備が整いました。 これを有効にするには、次のように入力します。

sudo swapon /swapfile

システムがスワップスペースを報告するかどうかを確認することで、手順が成功したことを確認できます。

 sudo swapon -s
 ファイル名タイプ使用されるサイズ優先度/swapfileファイル41943000-1

ここに新しいスワップファイルがあります。 freeユーティリティを再度使用して、調査結果を裏付けることができます。

無料-m
 キャッシュされた使用済み空き共有バッファの合計Mem:3953 101 3851 0 5 30-/ +バッファ/キャッシュ:66 3887スワップ:4095 0 4095

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

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

スワップファイルを有効にしましたが、再起動してもサーバーはファイルを自動的に有効にしません。 ただし、fstabファイルを変更することで変更できます。

テキストエディタでroot権限でファイルを編集します。

sudo nano /etc/fstab

ファイルの下部に、作成したファイルを自動的に使用するようにオペレーティングシステムに指示する行を追加する必要があります。

/swapfile   none    swap    sw    0   0

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

スワップ設定を微調整します

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

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

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

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

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

cat /proc/sys/vm/swappiness

60

デスクトップの場合、60のswappiness設定は悪い値ではありません。 VPSシステムの場合、おそらく0に近づけたいと思います。

sysctlコマンドを使用して、swappinessを別の値に設定できます。

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

sudo sysctl vm.swappiness=10

vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

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

vm.swappiness=10

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

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

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

cat /proc/sys/vm/vfs_cache_pressure

100

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

sudo sysctl vm.vfs_cache_pressure=50

vm.vfs_cache_pressure = 50

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

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

結論

このガイドの手順に従うと、RAMの使用量に関してある程度の余裕ができます。 スワップスペースは、いくつかの一般的な問題を回避するのに非常に役立ちます。

OOM(メモリ不足)エラーが発生した場合、またはシステムが必要なアプリケーションを使用できない場合、最善の解決策は、アプリケーション構成を最適化するか、サーバーをアップグレードすることです。 ただし、スワップスペースを構成すると、柔軟性が高まり、強力でないサーバーで時間を購入するのに役立ちます。

ジャスティン・エリングウッド