目的
去除舊式的 /swap 交換磁區的作法,改以更有彈性的 swapfile 方式替代。
說明
其實近年來電腦大都配置大容量記憶體以及 SSD 固態硬碟,主流 Linux 系統對於記憶體的內存 (cache)管理更得以最佳化,逐漸地,行之有年的 /swap 暫存磁區並不推薦採用。
不過,老舊電腦可能只有 4Gb RAM 的限制以內,卻又換了新的 SSD 固定硬碟,還是有需要使用到系統暫存區,諸如系統休眠 (hibernate),或內存不足。但是為了讓系統暫存的運作更有彈性,建議採以較新的方式,也就是以 Swapfile 取代 /SWAP 暫存磁區方式。
P.S. Linux Mint 18 在安裝時磁區規劃建議以手動方式設定,且不要新增 /swap 磁區;若以自動方式設定,則系統會自行增添 /swap 磁區 (partition)。雖然系統後續安裝時會警告沒有設置 /swap 磁區,但可以忽略它,待安裝完成後再以本文方式進行創建 swap file 的程序。
作法
- 檢查是否已有使用配置 SWAP:
~$ free -m
total used free shared buffers available Mem: 3878 378 2806 57 723 3230 Swap: 0 0 0
- 確認硬碟磁區可用容量:
~$ df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda 110G 9.5G 95G 2% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 312K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock
- 創建 swap file:
~$ sudo fallocate -l 4G / swapfile
設定僅給 root 讀取的權限:
~$ sudo chmod 600 /swapfile
檢查權限是否設定正確
~$ ls -lh /swapfile -rw ------- 1 root root 4.0G May 12 22:18 /swapfile
設置 swap 空間:
~$ sudo mkswap /swapfile
掛載 (mount) swap file:
~$ sudo swapon /swapfile
檢查掛載是否已載入:
~$ sudo swapon -s /swapfile file 4194300 0 -1
再次確認掛載是否成功:
~$ free -m total used free shared buffers available Mem: 3878 377 2806 65 904 3183 Swap: 4095 0 4095
- 開機自動掛載 swap file:
~$ sudo nano /etc/fstab
新增下列陳述至該文件最後一行:
/swapfile none swap sw 0 0
- 調整 swap file 效能參數:
swappiness and vfs_cache_pressure。swappiness參數將配置系統外的RAM swap數據到swap空間的頻率。這是介於0和100之間的值,表示一個百分比。
當值接近零時,除非在絕對必要時,內核不會將數據交換到磁盤。記住,與swap文件的交互是「昂貴的」,因為它們比與RAM的交互花費的時間長,並且它們可能導致性能的顯著降低。通知系統不要依賴於swap,會使系統運作更快。
更接近100的值會嘗試將更多的數據放入swap,以保持更多的RAM空間。根據應用程序的內存配置文件或用戶使用服務器的情況,這在某些情況下可能會更方便。
vfs_cache_pressure。此設置配置系統選擇高速緩存i節點和dentry信息與其他數據相比的量。基本上,這是訪問文件系統的數據。查找和頻繁地請求將花費許多精力,所以它對於系統緩存非常重要。
可以使用如下指令查看目前系統設定的數值:
~$ cat /proc/sys/vm/swappiness 60 ~$ cat /proc/sys/vm/vfs_cache_pressure 10
編輯 /etc/sysctl.conf 文件,加入上述兩個參數的設定值 (抓出自己電腦適合的數值):
~$ sudo nano /etc/sysctl.conf
vm.swappiness = 30 vm.vfs_cache_pressure = 50
※ 延伸參考:
o 如何在Ubuntu 14.04上添加Swap。