解決RAM不足問題 - 在 Linux 新增 Swap 虛擬記憶體
建立 Swap 虛擬記憶體儲存空間
一般建立 Swap 記憶體,大小通常會設定在實體記憶體的 1到 2倍。
以一台 1Gb 記憶體的主機而言,我們在這裡建立 2G的 Swap 虛擬記憶體儲存空間。
首先,在 var 透過 fallocate 建立 swapfile 資料夾,fallocate 可指定預留資料夾空間,以及權限設定為 root 可讀寫
cd /
fallocate -l 2G swapfile
chmod 600 swap-sda1
初始化 Swap 空間
首先,透過 mkswap 將 /swapfile 建立為 Linux 交換區,讓這個資料夾被分割為一個磁碟區
建立過程會自動分配一個 UUID 給這個磁碟區
(注意!執行 mkswap 會抹除交換區內的資料)
mkswap /swapfile
啟動交換區
狀況一、主機若使用一般硬碟,透過 swapon 來啟動交換區,讓 Linux 可以正常使用這個分割空間:
swapon /swapfile
狀況二、主機若使用支援TRIM的SSD硬碟 ,則可以透過 -d 或 discard 選項來提升交換區的效率
swapon -d /swapfile
啟動完成後,檢查 swap 狀態是否啟用
swapon -s
開機啟動
設定重新開機後,自動啟動 swap
一般類型磁碟
echo "/swapfile none swap sw 0 0" >> /etc/fstab"
支援TRIM的SSD磁碟
echo "/swapfile none swap sw,discard 0 0" >> /etc/fstab"
停止 swap 交換區
如果不使用,可透過以下指令終止:
sudo swapoff /swapfile
調整效能
在預設建立好的 swap ,在記憶體充足時,就會開始佔用 swap 空間。
如果想先主要以實體記憶體為主,swap 為輔,可以透過 swappiness 來設定分配方式。
首先,查看預設的 swappiness 設定
cat /proc/sys/vm/swappiness
預設通常會是 60 (值越高,表示會越優先使用 swap,範圍 0~100)
透過以下指令可修改值
sysctl vm.swappiness=10
以及設定開機自動設定
echo "vm.swappiness=10" >> /etc/sysctl.conf"
最後,檢查記憶體
free -m
若發現 Mem的 free 變很低,可以執行以下命令,手動釋放記憶體
echo 1 > /proc/sys/vm/drop_caches
問題排解
使用 CentOS 作法
如果使用 CentOS ,當執行swapon 時,出現錯誤訊息: swapon 失敗: 不適用的引數 或 swapon failed: Invalid argument,須改用dd 命令來創建 swap
dd if=/dev/zero of=/swapfile bs=1024 count=1024k
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon -s
參數說明 if 輸入文件名 of 輸出文件名 bs bytes,設置讀入/輸出大小 count blocks,僅拷貝 blocks bs