在 CentOS 中排查 swap(交换分区/交换文件) 问题,通常可以从是否启用、使用量、配置、性能、进程占用几个维度来查。下面给你一套实用排查流程。
free -h
或
swapon --show
✅ 正常应有类似:
NAME TYPE SIZE USED PRIO
/dev/sda2 partition 4G 1.2G -2
❌ 如果 free -h 中 Swap 全是 0,说明未启用或未配置
cat /etc/fstab | grep swap
常见形式:
/dev/sda2 swap swap defaults 0 0
或
/swapfile swap swap defaults 0 0
如果这里没有 swap,重启后 swap 不会自动启用。
如果是 swap 分区:
swapon /dev/sda2
如果是 swap 文件:
swapon /swapfile
⚠️ 若提示:
swapon: /swapfile: insecure permissions
执行:
chmod 600 /swapfile
for file in /proc/*/status; do
awk '/^Pid:|^Name:|VmSwap:/{printf "%s ", $0} END{print ""}' "$file"
done | sort -k3 -n -r | head
或安装工具:
yum install smem -y
smem -s swap -r | head
cat /proc/sys/vm/swappiness
常见值:
30(默认,偏保守)10(服务器推荐)0(尽量不用 swap)临时修改:
sysctl vm.swappiness=10
永久生效:
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
vmstat 1
关注:
si(swap in)so(swap out)持续非 0 → 内存不足或磁盘慢
创建 4G swap 文件示例:
dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
| 现象 | 原因 |
|---|---|
| free 显示 swap 0 | 未启用或未配置 |
| swap 用满 | 内存不足 |
| 系统卡顿 | swappiness 高 / 磁盘慢 |
| 重启后消失 | fstab 没写 |
| OOM 杀进程 | 内存 + swap 都不够 |
如果你愿意,可以贴一下:
free -hswapon --showcat /etc/fstab我可以帮你直接定位问题。