序章

クラウドサーバーの応答性を高める簡単な方法は、スワップスペースを追加することです。 スワップは、通常RAMに保存されている情報を一時的に保持するために使用できるハードドライブの領域です。 その結果、現在実行中のプロセスで使用できるRAMが増えます。

ノート

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

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

フードの下

Linuxカーネルは、情報を「ページ」と呼ばれる小さなチャンクでRAMに格納します。 プログラムは、RAMのスペースを占める多数のページを持つことができます。 新しいプロセスが物理メモリにアクセスする必要がある場合、必要に応じて新しいページが作成されます。 しかし、RAMにページ数を増やすためのスペースがなくなるとどうなりますか?

プログラムがRAMに割り当てられたすべてのページを使用していない場合は、未使用のページを削除して、スペースを再割り当てできます。 これは、これらのページファイルが必要に応じて簡単に再作成できるためです。 たとえば、プログラムAに10ページが割り当てられているが、7ページにしか書き込まれていない場合、3は一時的に破棄され、実際に必要になったときに再作成できます。 その間、これらの3ページが使用していたスペースは他のプログラムで使用できます。

では、スワップはどこから来るのでしょうか?

システムは、自由に再作成できないデータを含むページをRAMから削除しなければならない場合があります。 それらに書き込まれた情報は、ハードドライブですぐに利用できません。 システムがこの状態のページを削除する場合、その情報が失われないようにページを配置する場所が必要です。 その場所は「スワップ」と呼ばれます。

スワップファイルやスワップパーティションについては、それほど複雑なことはありません。 これは、RAMからのデータを一時的に保存するための領域にすぎません。 これは、アプリケーション、キャッシュされたデータ、またはRAMを占有する可能性のあるその他のものからの状態情報である可能性があります。 オペレーティングシステムは、必要に応じて、文字通りRAMからスワップスペースに、またはその逆に情報をスワップします。

スワップスペースを確認してください

このチュートリアルの手順を完了するには、rootとしてログインする必要があります。

su

独自のスワップファイルを作成する前に、システムでスワップスペースがすでに有効になっているかどうかを確認します。 これは、さまざまな方法で簡単に実行できます。 最初に「swapon」コマンドを試してみましょう。

swapon -s
swapon: stat failed -s: No such file or directory

ご覧のとおり、クリーンなArch Linux VPSでは、このコマンドは出力を生成しません。 コマンドは正しく実行されましたが、スワップスペースが見つかりませんでした。

より視覚的なフィードバックを提供するスワップをチェックする別の方法を試してみましょう。

free -m
             total       used       free     shared    buffers     cached
Mem:           494         60        434          0          6         28
-/+ buffers/cache:         25        469
Swap:            0          0          0

予想どおり、スワップは合計列で0になっています。 これは、「swapon」コマンドが私たちに伝えたことを確認します。

ファイルシステムを確認してください

スワップエリアの理想的なサイズについては、さまざまな意見があります。 ほとんどの場合、RAMの量を一致させるか2倍にするのが適切です(RAMの量が非常に多い場合を除きます。この場合、割り当てるスワップスペースを少なくすることができます)。 結局、それは個人的な好みに帰着し、決定は通常、マシンで利用可能なRAMとハードドライブの容量に影響されます。

このガイドでは、512MBのRAMと20GBのハードドライブがあります。 RAMの2倍の大きさのスワップスペースを設定すると、ハードドライブのかなりの部分になります。 したがって、代わりに、RAMの容量を一致させて、512MBのスワップスペースを作成します。

実際にスワップスペースを作成する前に、ハードドライブに十分なスペースがあることを確認する必要があります。 「df」コマンドで確認してみましょう。

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         20G  965M   18G   6% /
dev             240M     0  240M   0% /dev
run             248M  212K  248M   1% /run
tmpfs           248M     0  248M   0% /dev/shm
tmpfs           248M     0  248M   0% /sys/fs/cgroup
tmpfs           248M     0  248M   0% /tmp

最初の行を見ると、20GBのハードドライブがあり、そのうちの約18GBが未使用であることがわかります。 これは、512MBのスワップスペースを作成するのに十分なスペースです。

スワップファイルを作成して有効にする

これで、スワップスペースを作成する準備が整いました。 これを実現するための2つの異なる方法について説明します。 まず、「dd」コマンドを使用します。

dd if=/dev/zero of=/swapfile bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 1.96268 s, 274 MB/s

ファイルが正しく作成されたことを確認しましょう。

ls -lh /swapfile
-rw-r--r-- 1 root root 512M Jun 28 18:41 /swapfile

ご覧のとおり、/swapfileという512MBのファイルがあります。 別の方法でスワップファイルを作成してみましょう。 作成したスワップファイルを削除して、再試行できるようにします。

rm /swapfile

「fallocate」プログラムは、「dd」よりも高速にスワップファイルを作成できます。 追加の特典として、その構文も覚えやすくなっています。

fallocate -l 512M /swapfile

ここでも、正しいサイズのスワップファイルがあることがわかります。

ls -lh /swapfile
-rw-r--r-- 1 root root 512M Jun 28 18:54 /swapfile

これで、ハードドライブのルートパーティションに「swapfile」というファイルがありますが、システムがまだそれを認識または使用していないことがわかります。

free -m
             total       used       free     shared    buffers     cached
Mem:           494         41        453          0          1         13
-/+ buffers/cache:         25        468
Swap:            0          0          0

現在、ファイルは単なる通常のファイルです。 これを「スワップファイル」と呼んでいたかもしれませんが、Linuxはまだスワップとして使用することを知りません。 スワップとしてフォーマットして有効にする必要があります。

ただし、その前に、非常に重要な手順を完了する必要があります。 rootのみがファイルの読み取りと書き込みを行えるように、ファイルのアクセス許可を変更する必要があります。 ルート以外のユーザーが読み取りまたは書き込みを行うことができるスワップファイルは、非常に大きなセキュリティの脆弱性です。 「ls」を実行したときに見たように、現在、システム上の誰でも読み取ることができます。 今それを変えましょう。

chmod 600 /swapfile

ファイルを再確認すると、権限が正しいことがわかります。

ls -lh /swapfile
-rw------- 1 root root 512M Jun 28 18:54 /swapfile

ファイルが安全になったので、フォーマットできます。

mkswap /swapfile
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=61f42c98-d1ef-4f27-84c2-713c5f63d434

最後に、ファイルを有効にして、システムがファイルの使用を開始することを認識できるようにします。

swapon /swapfile

ファイルが認識され、使用されていることを確認しましょう。

free -m
             total       used       free     shared    buffers     cached
Mem:           494         42        452          0          1         14
-/+ buffers/cache:         25        468
Swap:          511          0        511

素晴らしい! スワップファイルが認識され、オペレーティングシステムは必要に応じてRAMからのデータを保存するためにそれを使用し始めます。

まだ終わっていません。 オペレーティングシステムは、起動するたびにこのファイルをスワップに使用しても安全であることを認識する必要があります。 これは、「/ etc/fstab」ファイルを編集することで実現できます。

nano /etc/fstab
# Paste this information at the bottom of the file
/swapfile	none	swap	defaults	0	0

スワップ設定の調整

スワップを使用する際に留意すべき点がいくつかあります。 スワップスペースはハードドライブ上にあるため、RAMよりもはるかに低速です。 つまり、オペレーティングシステムで必要なときにだけ使用する必要があります。 RAMがなくなるかなり前にページがスワップスペースに移動されると、操作が大幅に遅くなります。

システムがアイテムをRAMからスワップスペースに移動する頻度を制御するパラメータは、「スワップネス」と呼ばれます。 その値は0〜100の間の任意の値にすることができます。 値がゼロに近い場合、カーネルは絶対に必要でない限りスワップしないことを選択します。 値が100に近づくと、システムははるかに早くファイルをスワップアウトします。 情報はRAMではなくハードドライブからフェッチする必要があるため、これは速度の問題につながる可能性があります。

次のコマンドを入力すると、現在のswappiness設定を確認できます。

cat /proc/sys/vm/swappiness
60

システムのデフォルトのswappiness値は60です。 これはVPSの適切なデフォルトです。 デスクトップのswappinessを調整する場合は、おそらく0に近づけたいと思うでしょう。 「sysctl」コマンドを使用して、さまざまなswappiness値を試すことができます。

sysctl vm.swappiness=10
vm.swappiness = 10

システムがswappinessパラメーターの新しい値を受け入れたことがわかります。

cat /proc/sys/vm/swappiness
10

この設定をデフォルトにする場合は、「/ etc/sysctl.conf」ファイルを編集できます。

nano /etc/sysctl.conf
# Search for the vm.swappiness setting.  Uncomment and change it as necessary.
vm.swappiness=10

これにより、再起動後も設定を維持できます。 状況に最適なスワッピングを実現するために、このパラメーターを自由に試してみてください。

調整する可能性のあるもう1つの関連パラメーターは、「vm.vfs_cache_pressure」設定です。 キャッシュ圧力値を変更すると、他の種類の情報よりもiノードおよびdentryのキャッシュ情報を保持するというシステムの設定が変更されます。 これは、オペレーティングシステムがファイルシステムに関する情報をより長く保持することを意味します。これは、検索に非常にコストがかかり、非常に頻繁に要求されます。 これは通常、パフォーマンスの向上につながります。

ここでも、/procディレクトリを調べることで現在の値を確認できます。

cat /proc/sys/vm/vfs_cache_pressure
100

現在の設定では、iノード情報が必要以上に速くキャッシュから移動されます。 私たちの目的には、50のキャッシュプレッシャーの方がはるかに優れています。 これらの設定は、沼沢地で行ったのと同じ方法で変更できます。

sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

繰り返しになりますが、「/ etc / sysctl.conf」ファイルに追加することで、再起動してもこれを持続させることができます。

nano /etc/sysctl.conf
# Search for the vm.vfs_cache_pressure setting.  Uncomment and change it as necessary.
vm.vfs_cache_pressure = 50

これにより、キャッシュプレッシャーの構成が永続的になります。

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