十分な RAM があるのにシステムがスワップするのはなぜですか? これは有害ですか?

十分な RAM があるのにシステムがスワップするのはなぜですか? これは有害ですか?

私は、SSD を搭載した 64GB RAM のルート ベアメタル Ubuntu 16.04 サーバーを運用していますが、かなり負荷がかかっています。クラウド サーバーは、長期的には SSD を消耗させる可能性があるため、一般的にスワップを無効にすることを知りました。十分な RAM が利用できるのに必要がないのにスワップが実行されるので、サーバーが心配になります。

ダッシュボードのスクリーンショットここ

これは正常なのでしょうか、それともスワッピングを無効にするなどの処置を取ることをお勧めしますか?

答え1

短い答え:はい、それは正常なので心配する必要はありません。

長い答え:Linux は、十分なメモリが利用可能であっても、いくらかのスワップを使用します。その理由は、最近読み書きされたデータをキャッシュする方が、古い非アクティブなプログラムコードとデータを RAM に保持するよりも有用である可能性があるswappinessからです。このバイアスは、sysctl の調整値によって変更できます。カーネルドキュメント:

スワップネス

このコントロールは、カーネルがメモリ ページをスワップする積極性を定義するために使用されます。値が高いほど積極性が増し、値が低いほどスワップの量が減少します。値 0 は、空きページとファイル バックアップ ページの量がゾーンの最高水準点を下回るまで、カーネルがスワップを開始しないように指示します。

デフォルト値は 60 です。

本当にスワッピングを減らしたい場合は、swappiness次のように値を下げることができます。sysctl vm.swappiness=10 または echo 10 > /proc/sys/vm/swappinessこれは再起動するまで有効であることに注意してください。再起動後もこれを維持するには、ファイルを編集する必要があります/etc/sysctl.conf

スワップを完全に無効にしたい場合は、swapoff -a(関連する/etc/fstabエントリをコメント化して、再起動後も維持されるようにする) を使用できます。

答え2

Linuxがスワップしているからといって叫ばないでください。実際には健全なサーバーではこれは最適化されたサーバーの兆候さえなければ、完全に正常です。これは「低」スワップがドライブ上の貴重なIOアクションを節約できる場合がありますドライブ上のアクティビティが少ないほど(最先端の NVMe アレイでもコストのかかるプロセス)、パフォーマンスが向上します。

またスワッピングが積極的でない限りSSDにはほとんど害はありません。特にクラウドで使用されるSSDの多くはすべてのセルが死ぬまで PB(s) の範囲で持続するように構築されています。

答え3

メモリは常に割り当てと割り当て解除が行われており、これが断片化につながります。割り当てられたメモリの一部に続いて割り当てられていないメモリの一部が続く、という具合です。割り当てられていない (空き) メモリの部分は、時間の経過とともに小さくなっていきます。ある時点で、プロセスは、1 つの連続したブロックとして利用できないメモリ量を割り当てる必要がある場合があります。スワッピングは、メモリを解放し、そうでなければ利用できない、より大きな連続した空きメモリ部分を作成するのに役立ちます。

関連情報