私のコンピュータの1つは約120 GBまたは250 GBのRAMを消費します。スワップレベルは60で、これは約100 GBのスワップが発生することを意味します。 echo 1> /proc/sys/vm/swappiness/でswappiness設定を更新しました。しかし、まだスワップスペースが使用されていることがわかります。
これを適用するには、コンピュータ/プロセスを再起動する必要がありますか?
ベストアンサー1
値は動的に適用されますが、値に加えて、次の点を考慮する必要があります。
Linuxはデータを適切にスワップします(つまり、RAMがいっぱいになる前にスワップからデータをプッシュし始めます)、要求時にのみデータをスワップします(したがって、実際に必要なデータのみを取得します)。
データが再スワップされてもプログラムが終了するまで、コピーはスワップに残ります。理論的には、仮想メモリサブシステムがスラッシング(つまり、実行中のすべてがメモリに収まらないため、常にスワップの内外にデータを移動する場合)でシステムパフォーマンスを向上させることができます。交換のためにデータを再エクスポートします。交換されます。
ケース 1 と 2 の両方が該当しない場合でも、交換からデータを再度移動するのに時間がかかるため、システムは変更に直ちに顕著に反応しません。
今、これらすべてに加えて考慮すべきもう一つのことがあります。つまり、メモリが不足する前にシステムを交換することが正当な問題になるということです。ほとんどの場合、これは次の3つのうちの1つを意味します。
- 一部のプログラムのメモリ使用量を制限するためにメモリ制御グループを使用しており、その一部は制御グループの制限に達しました。
- 多数のファイルがキャッシュされており、システムが何らかの理由でメモリを解放するためにキャッシュから削除するのを嫌がっています。
- 非常にアクティブなのは多くのメモリを割り当てますが(おそらく巨大なページを使用)、実際には使用しません。
最初のケースでは、チューニングは/proc/sys/vm/swappiness
役に立ちません。制御グループに設定されているメモリ制限を表示して調整する必要があります(または実行中のアプリケーションを見て、どのアプリケーションが必要だと思うよりも多くのRAMを使用しているかを確認してください)。 。
2番目のケースでは、値を大きくすると、/proc/sys/vm/vfs_cache_pressure
値を減らすよりも優れた結果が得られます。/proc/sys/vm/swappiness
sysctl はvfs_cache_pressure
、システムがページキャッシュからスペースをどれだけ積極的に回収するかを制御します。パーセントで表示され、デフォルトは100です。私はそれを200に上げると、一般的にカーネルが実際に他のメモリ使用量にもっと興味があると信じることがわかりました。ただし、この値を高すぎると、全体的なパフォーマンスに悪影響を及ぼす可能性があります。キャッシュを縮小できない場合、キャッシュを縮小するのに時間が無駄になるからです。
3番目のケースは問題のプログラムに問題がある場合であり、ほとんどの場合、開発者に苦情を提起する以外にできることはあまりありません。