5

私のサーバーには8GigのRAMとスワップファイル用に構成された8Gigがあります。メモリを大量に消費するアプリを実行しています。これらのアプリの負荷はピークに達し、その間にスワップの使用量が増加します。約1GIGのスワップが使用されます。

4ギガのRAMと8ギガのスワップを備えた別のサーバーと同様のメモリを大量に消費するアプリが実行されています。しかし、ここではスワップの使用はごくわずかです。約100MB。

LinuxがRAM内のプロセスメモリをスワップファイルにスワップアウトする正確な条件や大まかな式は何でしょうか。私はそれがスワッピングファクターに基づいていることを知っています。それは他に何に基づいていますか?ファイルサイズを入れ替えますか?これを説明するLinuxカーネルのドキュメント/ソースコードへのポインタは素晴らしいでしょう。

4

2 に答える 2

8

多くの人がこれが何をするかについて主観的な説明を投稿しているのを見てきました。これがうまくいけば、より完全な答えです。

2.6.28 以降の分割 LRU では、Linux swappiness は、両方の LRU で構築された圧力を決定するために計算される割合を任意に変更するために使用される乗数です。

したがって、たとえば、空きメモリが残っていないシステムでは、既存のメモリの値は、「アクティブ」としてリストされているメモリの量の割合と、ページがアクティブに昇格された後にページが昇格される頻度の割合に基づいて測定されます。非活動リストに入る。

アクティブなページと非アクティブなページの間で多くのページの昇格/降格を行う LRU はよく使用されます。

通常、ファイルにバックアップされたストレージは、メモリが不足している場合に削除する方が安価で安全であり、自動的に 200 の修飾子が与えられます (これにより、ファイルにバックアップされたメモリは、これを乗算すると、スワップにバックアップされたメモリ (値が 0) よりも 200 倍価値がなくなります)。分数。

swappiness が行うことは、指定した swappiness 値 (デフォルトは 60) をファイル メモリに差し引き、乗数として与えた swappiness 値を anon メモリに追加することで、この値を変更することです。したがって、デフォルトの swappiness では、匿名メモリはファイル メモリの 80 倍の価値があります (ファイルの場合は 200-60、anon の場合は 0+60)。したがって、すべてのメモリを使い果たした典型的な Linux システムでは、ページ キャッシュを優先して匿名メモリをスワップ アウトするには、ページ キャッシュが匿名メモリの 80 倍アクティブである必要があります。

swappiness を 100 に設定すると、anon に 100 の修飾子が与えられ、ファイル メモリに 100 (200 - 100) の修飾子が与えられ、両方の LRU が等しく重み付けされます。したがって、anon メモリがページ キャッシュほどアクティブでない場合にページ キャッシュが必要なファイル負荷の高いシステムでは、追加のページ キャッシュ用のスペースを確保するために anon メモリがディスクにスワップされます。

于 2011-03-19T22:38:27.660 に答える
5

Linux (またはその他の OS) はメモリをページ (通常は 4Kb) に分割します。これらの各ページは、メモリのチャンクを表します。これらのページの使用状況情報が維持されます。これには基本的に、ページが空いているか使用中 (何らかのプロセスの一部) であるか、最近アクセスされたかどうか、ページに含まれるデータの種類 (プロセス データ、実行可能コードなど) に関する情報が含まれます。 )、ページの所有者など。これらのページは、ファイルシステムページまたはページキャッシュ(ファイルシステムに読み書きされるすべてのデータが存在する)とプロセスに属するページの2つのカテゴリに大きく分けることもできます。

システムのメモリが不足すると、カーネルは使用状況に基づいてページのスワップアウトを開始します。どのページをスワップアウトできるかを判断するために、アクセスの最新性に従ってソートされたページのリストを使用するのが一般的です (Linux カーネルにもそのようなリストがあります)。

スワッピング中、Linux カーネルは、メモリ内のページをヌクしてスワップに送信するときに、何をトレードオフするかを決定する必要があります。ファイルシステムのページを頻繁にスワップすると、必要なときにそれらのページを読み戻すために、ファイルシステムからより多くの読み取りが必要になります。ただし、プロセス ページをより積極的にスワップ アウトすると、ユーザーがスワップ アウトされたプロセスを使用しようとすると、ディスクから読み戻さなければならないため、対話性が損なわれる可能性があります。これについては、こちらの素敵な議論を参照してください。

swappiness = 0 を設定することで、プロセスに属するページをスワップアウトしないように Linux カーネルに指示します。代わりに swappiness = 100 を設定すると、プロセスに属するページをより積極的にスワップアウトするようにカーネルに指示します。システムを調整するには、「vmstat」コマンドを使用して、swappiness パラメータを 10 段階で変更し、各設定でスワップイン/スワップアウトされるパフォーマンスとページを監視してみてください。最良の結果が得られる設定を維持してください。ピーク使用時間帯にこのテストを行うことを忘れないでください。:)

データベース アプリケーションの場合、swappiness = 0 が一般的に推奨されます。(それでも、システムのさまざまな設定をテストして、適切な値に到達します)。

参考文献:
http://www.linuxvox.com/2009/10/what-is-the-linux-kernel-parameter-vm-swappiness/
http://www.pythian.com/news/1913/

于 2010-01-08T17:23:38.073 に答える