Swap

為什麼 Linux 在 VM 中需要交換空間?

  • January 17, 2018

Linux VM 執行 nginx(或任何其他具有穩定資源使用的輕量級守護程序)。虛擬機分配了 2GB 記憶體,其中 200-300MB 供作業系統和服務使用,其餘用於文件記憶體和緩衝區。在一個特定的案例中,我期望一個簡單的 500MB 成本。

**問:**為什麼這個設置需要交換空間?

“防止記憶體耗盡”的標準答案在這裡對我來說沒有意義,原因有兩個:**1:**對記憶體的需求已經確立,不需要支持意外或突然的顯著增加。**2:**無論如何,Swap只會延遲OOM情況。同樣的事情可以通過首先為虛擬機分配更多的記憶體來完成,特別是因為它是精簡配置的,只要它未被使用,任何人都不會錯過它。

支持休眠的另一個常見答案不適用於 VM 中的伺服器。

我認為沒有理由在這樣的伺服器上進行交換;我錯過了什麼嗎?

您不應該考慮“是否有交換”,您應該考慮您的整體記憶體分配策略並確定是否需要交換。這有兩個主要方面。

如今交換的主要目的不是擴展物理記憶體,而是為其他不可回收的頁面(例如記憶體分配和匿名mmaps)提供備份儲存。如果在沒有交換的情況下執行,則會強制核心將匿名記憶體保留在物理記憶體中,這會降低其應對不同記憶體需求的能力。顯然,如果您知道您的工作負載始終適合可用的物理記憶體,那麼這應該不是問題。

要考慮的第二個方面是核心的過度使用策略。預設情況下,無論記憶體負載如何,記憶體分配大部分都會成功。如果你想控制你的工作量,在檢查模式下執行通常會很有幫助(/proc/sys/vm/overcommit_memory設置為 2);然後送出被限制為交換的總和,並且未為大頁面分配的物理記憶體由過度使用比率(預設為 50%)調整。如果您在沒有交換的情況下執行,則預設情況下沒有任何東西可以分配超過一半的物理記憶體;添加交換會線性增加限制,比增加過度使用率風險更小。(當試圖在典型的伺服器設置上執行大型 JVM 時,這經常會讓人絆倒。)

我提到了上面描述的兩個主要方面,但在我看來,在某些情況下還需要考慮另一點(它實際上是第一點的變體):tmpfs文件系統很容易讓您的系統陷入困境,如果沒有交換…

有關這一切的更多資訊,我建議閱讀proc(5)手冊頁中關於過度使用的部分,以及Chris Down 最近的部落格文章為 swap 辯護

引用自:https://unix.stackexchange.com/questions/417855