
我的 Debian Stretch 系統有大量 RAM。目前,它在 SSD 上使用加密交換分割區,但在正常情況下,我不認為記憶體不足會導致它被使用。
但根據 Snakedoc 的評論,完全關閉交換是一個壞主意:
請注意,完全禁用交換永遠不會“安全”。即使對於具有 96+ GB RAM 的系統,運行至少 512MB 的交換也是一個很好的安全措施。如果某些東西運行失控並意外耗盡所有內存,它可以讓您的系統有時間殺死不必要的進程...禁用交換的替代方案是內核恐慌。
所以我想我可以保留一些內存,例如 0.5G 作為“RAM 磁碟”,並將其用作交換文件,將寫入保存到 SSD。
我怎麼做?由於某些原因這是一個壞主意嗎?
答案1
我不會說原因是穩定性,這是一個常見的誤解。如果系統記憶體+交換空間已滿,您會發現實際上與沒有交換空間相同的症狀:
- 無法解釋,大的速度減慢(系統鎖定要求記憶體的進程一段時間,也許有人釋放了它們所需的記憶體)
- 被 OOM(記憶體不足)殺手終止的進程。
唯一的區別是沒有交換,這些症狀就會發生突然,而對於交換,它們僅在交換被填寫後發生。因此,在系統開始完全無回應之前,您有更長的延遲時間。
這是第一個原因,為什麼交換是有用的。
第二個不太為人所知,但實際上更重要:
一般來說,使用交換不會減慢你的機器速度,反而會加速它,即使你的記憶體遠遠不夠。
原因如下:您的系統中的 RAM 實際上沒有被您的進程使用嗎?它們用於快取您的硬碟,使您的系統速度更快。
如果你有交換,你實際上允許你的系統交換很少的記憶體頁面,並將它們的空間用於磁碟快取。它們發生的速度有多快,這取決於您的虛擬機器設定和啟發式方法,但它們確實很好(據我所知,從這個意義上來說,linux 是最好的)。
如果您的硬碟位於 SSD 上,則不會真正影響這兩個參數(儘管擁有更快且零尋道時間的磁碟當然可以加速一切)。
我主要使用舊的交換分區黃金法則:我使用 2 倍以上的交換空間作為 RAM。這是為了避免交換碎片(交換文件上的區塊可以像檔案系統上的文件一樣碎片化)。在您的情況下,如果您擁有大量 RAM,但具有零尋道時間的昂貴硬碟,則交換碎片不是問題,因此也許更少就足夠了。我不知道,你有多少SSD,也許你的RAM網站的1倍甚至0.5倍就夠了。
在我看來,這個「至少有 512M 交換空間」的建議是不好的,你使用的交換空間數量必須取決於你的系統參數(磁碟成本、RAM 數量、磁碟數量、硬碟尋道時間等)。這個512M不是一個“黃金法則”,它是一個“魔數”,如果我們一般使用它是沒有意義的。
答案2
在 SSD 系統上使用 HDD 進行交換並不是一個好主意。與現代 SSD 相比,它不僅速度較慢,而且訪問時間更長、耗電更多,而且可能可靠性較差。現在的SSD有5年保固,即使每天寫入數百GB也能輕鬆使用8-10年
但最好是使用zram
,可能還有 SSD 上的一個小型備份交換分區。各種 Linux 發行版以及 ChromeOS 和 Android 多年來都預設啟用 zram。 Android 上甚至沒有預設的傳統交換功能。甚至視窗和蘋果系統現在在求助於交換之前使用壓縮RAM
由於CPU解壓縮資料的速度比HDD快得多,因此一旦系統開始交換,您就可以清楚地感受到系統的反應速度。差異並不是 SSD 固有的,而是根據基準測試結果在這裡使用預設 lzo 演算法的 zram 看起來仍然更快。您可以輕鬆更改為lz4演算法這是比 lzo 快近 5 倍壓縮比稍低
還有zswap
它使用不同的機制,但仍然將壓縮資料儲存在 RAM 上
進一步閱讀
答案3
根據 @peterh 的回答,一個好的解決方案可能是將任何舊 HDD 插入電腦中並將其用作暫存空間,包括交換空間。這樣所有的記憶體都可以用於系統,甚至是最後的 0.5G。筆記型電腦 HDD 可能比 3.5 吋硬碟更節能。