當Ubuntu系統的swap占用過高時,可能會導致系統性能下降。以下是一些處理swap占用高的方法:
首先,使用以下命令查看當前Swap空間的使用情況:
free -h
或者
sudo swapon --show
臨時調整:
使用以下命令臨時將swappiness值設置為較低的值(例如10):
sudo sysctl vm.swappiness=10
永久調整:
編輯 /etc/sysctl.conf
文件,添加或修改以下行:
vm.swappiness=10
然后運行以下命令使更改生效:
sudo sysctl -p
如果系統的物理內存不足,增加物理內存是最直接的解決方案。這可以通過升級硬件或清理不必要的應用程序來實現。
如果增加物理內存不可行或不足以解決問題,可以考慮增加Swap空間:
使用以下命令創建一個指定大小的swap文件(例如4GB):
sudo fallocate -l 4G /swapfile
設置文件權限:
sudo chmod 600 /swapfile
格式化Swap文件:
sudo mkswap /swapfile
啟用Swap文件:
sudo swapon /swapfile
永久啟用:
將以下內容添加到 /etc/fstab
文件中,以便系統在啟動時自動啟用:
/swapfile none swap sw 0 0
如果系統已經有Swap分區,可以使用以下命令查看當前Swap情況:
sudo swapon --show
格式化Swap分區:
sudo mkswap /dev/nvme0n1p6
激活Swap分區:
sudo swapon /dev/nvme0n1p6
將Swap分區添加到 /etc/fstab
文件中,以便系統啟動時自動加載:
echo '/dev/nvme0n1p6 none swap sw 0 0' | sudo tee -a /etc/fstab
使用以下命令可以找到占用swap的進程:
for proc in $(find /proc -maxdepth 1 -type d -regex "/proc/[0-9]"); do
pid=$(basename $proc)
cmd=$(cat $proc/cmdline 2>/dev/null | tr '\0' ' ')
swap=$(awk '/VmSwap/ {print $2}' $proc/status 2>/dev/null)
if [ "$swap" != "" ] && [ "$swap" -gt 0 ]; then
echo "PID: $pid Swap: $swap KB CMD: $cmd"
fi
done | sort -k4 -n -r | head -10
找到占用swap較多的進程后,可以考慮優化這些進程的內存使用或重啟這些進程。
使用以下命令釋放無用的緩存,騰出更多物理內存:
sudo sync
sudo sysctl vm.drop_caches
通過上述方法,可以有效降低swap使用,提高系統性能。根據具體情況選擇合適的優化策略。