為什麼系統在有足夠 RAM 的情況下會進行交換,這有害嗎?

為什麼系統在有足夠 RAM 的情況下會進行交換,這有害嗎?

我運行一台帶有 SSD 的 64GB RAM 根裸機 ubuntu 16.04 伺服器,負載相當重。現在我了解到雲端伺服器通常會停用交換,因為從長遠來看它會磨損SSD。這讓我擔心我的伺服器,因為它會交換,而沒有必要,因為有足夠的 RAM 可用。

儀表板截圖這裡

這是正常現象還是您建議採取措施,例如禁用交換?

答案1

簡短回答:是的,這是正常現象,您無需擔心。

長答案:即使有足夠的可用內存,linux 也會使用一些交換區。其基本原理是,快取最近讀取/寫入的資料比將舊的、不活動的程式碼和資料保留在 RAM 中更有用。可以透過 sysctl 可調參數修改此偏差swappiness。來自內核文檔:

交換性

此控制用於定義內核交換記憶體頁面的積極程度。較高的值會增加攻擊性,較低的值會減少交換量。值 0 指示核心不要啟動交換,直到空閒頁面和檔案支援頁面的數量小於區域中的高水位線。

預設值為 60。

如果你真的想減少交換,你可以swappiness透過降低值sysctl vm.swappiness=10 或者 echo 10 > /proc/sys/vm/swappiness。請記住,這在重新啟動之前一直有效;要在重新啟動之間保留它,您需要編輯該/etc/sysctl.conf文件。

如果您想要完全停用交換,您可以使用swapoff -a(註釋相關/etc/fstab條目以使其在重新啟動之間持續存在)。

答案2

不要因為 Linux 正在交換而尖叫,實際上在健康的伺服器中這是即使沒有優化伺服器的跡象,也完全正常。這是因為「低」交換可以有時可以為您和您的驅動器節省驅動器上寶貴的 IO 操作。驅動器上的活動越少(即使在最先進的 NVMe 陣列上,流程也昂貴)越好。

除非交換是激進的它對 SSD 的傷害微乎其微。尤其是許多用於雲端的SSD在細胞全部死亡之前,其壽命可維持在 PB 範圍內。

答案3

記憶體一直在分配和取消分配,這會導致碎片:一部分已分配的記憶體後面跟著一部分未分配的內存,依此類推。隨著時間的推移,記憶體的未分配(空閒)部分可能會變得越來越小。在某些時候,進程可能需要分配一些不能作為單一連續區塊使用的記憶體。交換有助於釋放內存並創建更大的連續部分的空閒內存,否則這些內存將不可用。

相關內容