介紹如何在 Linux 系統上以指令動態增加 swap 記憶體交換空間檔案,避免記憶體不足造成系統崩潰。
以 fallocate
指令配置一個準備作為記憶體交換空間(swap)的檔案:
# 建立交換空間用的檔案,大小為 1 GB sudo fallocate -l 1G /swapfile
其中 -l 1G
是用來指定檔案的大小為 1 GB,可以自行更改為需要的大小,例如 256M
或 1T
。
如果系統上沒有安裝 fallocate
指令,則可改用 dd
指令來配置檔案:
# 建立交換空間用的檔案,大小為 1 GB sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
作為系統的記憶體交換空間,檔案權限要設定為只有 root
才能存取:
# 設定檔案權限 sudo chmod 600 /swapfile
以 mkswap
指令將檔案設置為記憶體交換空間:
# 將檔案設置為記憶體交換空間(swap)
sudo mkswap /swapfile
以 swapon
啟用記憶體交換空間:
# 啟用記憶體交換空間
sudo swapon /swapfile
查看目前系統所有的記憶體交換空間使用狀況:
# 查看記憶體交換空間使用狀況 swapon -s
或是使用 free
查看整個系統的記憶體使用狀況:
# 查看記憶體使用狀況 free -h
在 /proc/meminfo
中有很詳細的記憶體資訊,其中也有包含交換空間的資料:
# 查看記憶體資訊 grep -i swap /proc/meminfo
若要將 /swapfile
這一個記憶體交換空間檔案設定為開機自動掛載,可以修改 /etc/fstab
設定檔,加入以下設定:
# 自動掛載 /swapfile 記憶體交換空間 /swapfile swap swap defaults 0 0
在 Linux 系統中有一個記憶體交換空間優先度(swappiness),捨設定的數值範圍是 0
到 100
,這個數值如果越大,系統就會越傾向使用交換空間,反之如果這個數值越小,系統就會越避免使用交換空間。
這個數值存放在 /proc/sys/vm/swappiness
之中,可以直接查看其數值:
# 查看記憶體交換空間優先度(swappiness)
cat /proc/sys/vm/swappiness
60
若要修改這個數值,可以使用 sysctl
指令:
# 修改記憶體交換空間優先度為 10 sudo sysctl vm.swappiness=10
若要永久更改此設定值,可以將設定值寫在 /etc/sysctl.conf
設定檔之中:
# 設定記憶體交換空間優先度為 10 vm.swappiness=10
若要移除記憶體交換空間檔案,首先以 swapoff
停用記憶體交換空間:
# 停用記憶體交換空間 sudo swapoff -v /swapfile
若有在 /etc/fstab
中設定開機自動掛載的話,記得把設定移除。
最後刪除這個檔案:
# 刪除檔案
sudo rm /swapfile
這樣就完成移除記憶體交換空間檔案了。
參考資料:LINUX 技術手札、Linuxize、nixCraft