为什么在仍有大量空闲内存的情况下使用交换区?

为什么在仍有大量空闲内存的情况下使用交换区?

在下面的 2.6.18 Linux Kernel (Red Hat) 服务器中,有很多可用内存,但我看到一些交换被使用。我一直认为交换是内存耗尽时的溢出。为什么它会与大约 7GB (50%) 的可用内存进行交换?交换度为 60(默认)。

内存信息输出:

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

答案1

如果设置为 0,则仅在没有可用内存时才进行交换。swappiness否则,在空闲期间,内核将交换内存。在此过程中,数据不会从内存中删除,而是会在交换分区中创建一个副本。

这意味着,如果出现内存耗尽的情况,则不必立即写入磁盘。在这种情况下,内核可以只覆盖已经交换的内存页面,因为它知道它拥有数据的副本。

swappiness参数基本上只是控制它执行此操作的程度。

相关内容