如何限制交換使用?

如何限制交換使用?

我希望我的電腦在 UPS 切換到電池時自動休眠,因此我隨時需要足夠的可用交換空間。但是,如果我啟動交換分割區,即使在休眠之前,它也可能被記憶體頁面佔用。

我找到的唯一解決方案是完全設定/proc/sys/vm/swappiness0停用分頁。但這不是最好的選擇。

是否可以指定最大交換使用量(以位元組為單位)?

答案1

cat /proc/sys/vm/swappiness
0

意味著除非絕對必要(RAM 已滿),否則將避免交換。 Swappiness 的取值介於0-100.

若要使變更永久更新/etc/sysctl.conf並重新啟動電腦:

vm.swappiness = 10

您無法以位元組為單位配置交換,但交換10意味著當 RAM 已滿 90% 時將使用交換。交換區的大小是在系統安裝期間給定的,您需要調整分割區大小才能變更它。交換空間佔用的數量取決於您正在執行的軟體的 RAM 分配要求。

答案2

我發現的唯一解決方案是使用交換文件您可以建立任何大小(例如幾 GB),然後將其安裝為交換區域。

head -c 2G /dev/urandom > your.filename

您可以修改下面的程式碼,該程式碼將使用隨機金鑰建立加密的交換文件。當然,您需要將$filename變數設定為交換文件所在的位置。

filename="????"
head -c 4k /dev/urandom | sha512sum | cryptsetup open --type plain $filename /dev/mapper/swap
cryptsetup status /dev/mapper/swap
mkswap /dev/mapper/swap
swapon /dev/mapper/swap
sysctl vm.swappiness=0

編輯:如果您希望重新啟動後可以存取交換區,只需將隨機密鑰替換為已知密鑰即可。

相關內容