Linux
為什麼在大量記憶體仍然可用時使用交換?
在下面的 2.6.18 Linux Kernel (Red Hat) 伺服器中,有很多可用記憶體,但我看到使用了一些交換。當記憶體耗盡時,我一直認為交換是溢出。為什麼它會與大約 7GB (50%) 的可用記憶體進行交換?Swappiness 為 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
僅當沒有空閒記憶體時才進行交換,僅當您設置
swappiness
為 0 時才會發生這種情況。否則,在空閒時間,核心將交換記憶體。在這樣做時,數據不會從記憶體中刪除,而是在交換分區中製作一個副本。這意味著,如果出現記憶體耗盡的情況,它不必當場寫入磁碟。在這種情況下,核心可以只覆蓋已經被交換的記憶體頁面,它知道它有一份數據副本。
該
swappiness
參數基本上只是控制它執行此操作的程度。