在麒麟系统中排查Swap占用需分三步:用top启用SWAP列并倒序查看实时占用;用ps命令按swap排序提取前10高占用进程;通过/proc/[PID]/status精确读取单个或批量进程的Swap值,确认实际换出页大小。

在麒麟系统中排查Swap空间被哪些进程实际占用,是定位内存压力根源的关键动作。直接看free或swapon只能知道总量,但无法回答“谁在用Swap”这个核心问题。
用top命令动态查看进程级Swap占用
1、启动top:在终端输入top并回车。
2、按f键进入字段管理界面,用方向键移动到SWAP字段,按空格启用该列,再按Esc退出。
3、此时界面新增一列显示每个进程当前占用的Swap字节数;按Shift + O可按该列倒序排列,最高者置顶。
4、注意:【SWAP列数值为实时快照,仅反映当前已换出页的大小,不包含待换出但尚未触发的页】。
用ps命令批量提取高Swap占用进程
1、执行以下命令一次性列出Swap占用最高的前10个进程:
ps -eo pid,comm,%mem,vsz,rss,swap --sort=-swap | head -n 11
2、其中swap列为各进程当前占用的Swap KB数,vsz为虚拟内存大小,rss为常驻物理内存,三者结合可判断进程是否处于严重换页状态。
3、若输出中swap列为全0或空白,说明当前无进程实际使用Swap——此时无需进一步排查,应转而检查free -h中Swap used是否真为非零值。
用/proc/[PID]/status精确定位单个进程Swap细节
方法一:确认某进程是否真在用Swap
1、先通过pgrep -f "java"等获取目标PID。
2、执行grep -i swap /proc/12345/status(将12345替换为真实PID)。
3、若返回Swap: 12456 kB,即表示该进程当前有约12MB页被换出;若无输出,则Swap值为0。
方法二:批量扫描所有活跃进程的Swap占用
1、运行以下命令:
for pid in /proc/[0-9]*; do [ -r "$pid/status" ] && awk '/^Name:/ {name=$2} /^Swap:/ {printf "%s (%s) %s\n", $2, name, $1}' "$pid/status" 2>/dev/null; done | sort -k1,1nr | head -20
2、该命令遍历/proc下所有数字PID目录,提取Name和Swap字段,按Swap值降序排列前20条。
3、这一步会略慢,但结果比top更稳定——它不依赖top内部缓存机制,直接读取内核实时状态。

















