以下の2.6.18 Linuxカーネル(Red Hat)サーバーでは、多くの空きメモリがありますが、いくつかのスワップが使用されています。私はいつもメモリが使い果たされたときのスワップをオーバーフローと考えていました。約7GB(50%)の空きメモリと交換するのはなぜですか? Swappinessは60(デフォルト)です。
Meminfoの出力:
MemTotal: 16436132 kB
MemFree: 7507008 kB
Buffers: 534804 kB
Cached: 2642652 kB
SwapCached: 39084 kB
Active: 6001828 kB
Inactive: 2532028 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 16436132 kB
LowFree: 7507008 kB
SwapTotal: 2097144 kB
SwapFree: 1990096 kB
Dirty: 236 kB
Writeback: 0 kB
AnonPages: 5353644 kB
Mapped: 45764 kB
Slab: 330660 kB
PageTables: 34020 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 10315208 kB
Committed_AS: 14836360 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 264660 kB
VmallocChunk: 34359472735 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
空きメモリがない場合にのみスワッピングが発生するのは、swappiness
を0に設定した場合のみです。それ以外の場合は、アイドル時にカーネルがメモリをスワップします。これを行う際、データはメモリから削除されず、スワップパーティションにコピーが作成されます。
これは、メモリが使い果たされている状況が発生した場合に、その場でディスクに書き込む必要がないことを意味します。この場合、カーネルはすでにスワップされているメモリページを上書きするだけでよく、そのため、データのコピーがあることがわかります。
swappiness
パラメータは基本的に、これを行う量を制御するだけです。