在 CentOS 上“调试 swap”通常分为几个层面:确认 swap 状态、定位 swap 使用异常、调优 swap 参数、排查性能问题。下面按实用顺序说明。
free -h
swapon -s
cat /proc/swaps
正常应看到:
free -h 中 Swap 行不为 0swapon -s 有设备(如 /dev/sda2 或文件)smem -s swap -r
# 或
for pid in $(ls /proc | grep '^[0-9]'); do
awk -v p=$pid '/VmSwap/{print p, $2}' /proc/$pid/status
done | sort -k2 -n -r | head
lsblk
swapon -s
创建 swap 文件示例:
dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
检查 swappiness:
cat /proc/sys/vm/swappiness
临时调整:
sysctl vm.swappiness=10
永久:
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
free -h
vmstat 1
关注:
si/so 持续 > 0 → 频繁 swapavailable memory 很低ps -eo pid,comm,vsz,rsz,swap --sort=-swap | head
echo 0 > /proc/<pid>/oom_score_adj
或使用 mlock(程序级)
sysctl vm.swappiness=10
cat /proc/sys/vm/vfs_cache_pressure
sysctl vm.vfs_cache_pressure=50
modprobe zswap
free -h
swapon -s
vmstat 1
sar -W 1
cat /proc/sys/vm/swappiness
dmesg | grep -i swap
✅ 是否内存真的不够
✅ swappiness 是否过高
✅ 是否有大进程常驻 swap
✅ swap 设备是否为 HDD(慢)
✅ 是否应加内存而不是加 swap
如果你愿意,可以告诉我:
我可以给你更针对性的调试方案。