温馨提示×

怎么查看Swap占用进程

小樊
41
2026-08-18 09:52:39
栏目: 编程语言

要查看 哪个进程占用了 swap,可以根据系统环境(Linux 为主)选择下面几种常用方法。


一、推荐方法(最常用)

✅ 用 smem 查看每个进程的 swap 占用

smem -s swap -r -p

或更详细:

smem -t -k

示例输出中:

  • Swap 列:进程实际使用的 swap
  • PSS / RSS:内存占用

如果没有 smem

yum install smem      # CentOS/RHEL
apt install smem      # Debian/Ubuntu

二、用 top 查看(简单快速)

top

进入后:

  1. f
  2. 找到 SWAP,按 空格 选中
  3. 回车
  4. Shift + > / < 按 swap 排序

你可以看到每个进程的 swap 使用量。


三、用 htop(更直观)

htop

操作:

  • F2 → Columns
  • 勾选 SWAP
  • F6 选择 swap 排序

安装:

yum install htop
apt install htop

四、从 /proc 精确查看(适合脚本)

1️⃣ 查看所有进程 swap 总和

for pid in $(ls /proc | grep '^[0-9]'); do
  awk '/VmSwap/ {print $2}' /proc/$pid/status 2>/dev/null
done | awk '{s+=$1} END {print s " kB"}'

2️⃣ 查看每个进程 swap 占用

for pid in $(ls /proc | grep '^[0-9]'); do
  swap=$(awk '/VmSwap/ {print $2}' /proc/$pid/status 2>/dev/null)
  [ "$swap" ] && echo "PID: $pid Swap: ${swap} kB"
done | sort -k3 -n

五、查看系统整体 swap 使用情况

查看 swap 总量和使用

free -h

查看 swap 分区

swapon -s

六、常见原因 & 建议

  • swap 占用高 ≠ 内存不够
  • 常见原因:
    • Java / MySQL / Redis 长时间运行
    • 内存碎片化
    • swappiness 设置过高

查看 swappiness

cat /proc/sys/vm/swappiness

临时降低 swap 使用倾向

sysctl vm.swappiness=10

✅ 总结(最推荐)

场景 推荐命令
快速查看 top / htop
精确分析 smem
脚本/自动化 /proc/[pid]/status

如果你愿意,可以把 free -htop 的输出贴出来,我可以帮你判断 是否需要优化或释放 swap

0