麒麟系统无swap命中率,应关注换入换出速率、swap负载及进程占用;先用free -h确认swap已使用,再通过/proc/vmstat、top或/proc/pid/status定位活跃swap行为。

麒麟操作系统没有直接提供“Swap命中率”这一指标,因为Swap本身不缓存、不命中——它只是被动换出页的存储载体;所谓“命中率”是误用概念,实际应关注页面换入换出速率、活跃Swap设备负载及进程级Swap占用分布。
确认Swap是否正在被真实使用(先决条件)
执行 free -h,检查Swap行的used值是否大于0。若为0,说明当前无任何页被换出到Swap,后续所有分析失去意义。
若used非零,再运行 swapon --show,确认至少有一个设备状态为active。【若无active设备,Swap数据实为残留统计,不可信】。
查看Swap I/O活动速率(本质是“换页频度”)
打开终端,执行以下命令获取原始换页计数:
cat /proc/vmstat | grep -E "pgpgin|pgpgout"
输出类似:
pgpgin 1248932
pgpgout 987654
这两个值是自系统启动以来累计发生的换入(从Swap读回内存)和换出(写入Swap)的扇区数,单位为512字节扇区。它们不是“命中率”,而是Swap空间被实际访问的总次数度量。
要判断当前活跃程度,需做差值计算:记录一次数值→等待5秒→再记录→相减后除以5,得到平均每秒扇区换入/换出量。若pgpgout持续高于10000扇区/秒(≈5MB/s),说明内核正高频将页写入Swap。
定位高Swap消耗进程(关键落地点)
方法一:用top动态观察
启动top,按f进入字段管理界面,用方向键选中SWAP字段,按空格启用,再按Esc退出;此时界面新增SWAP列,显示每个进程当前占用的Swap字节数;按Shift + O可按该列倒序排列。
方法二:用/proc接口批量提取
执行以下命令:
for pid in /proc/[0-9]*; do [ -r "$pid/status" ] && awk '/^VmSwap:/ {printf "%s %s\n", substr($2,1,length($2)-2), ENVIRON["pid"]; }' "$pid/status" 2>/dev/null; done 2>/dev/null | sort -nr | head -10
该命令遍历所有进程的/proc/PID/status,提取VmSwap:行(单位KB),排序后取前10名。输出形如:
1245678 /proc/12345/status
注意:此处数字是进程当前驻留在Swap中的内存页大小,不是历史累计值,也不是“命中”次数。
交叉验证Swap活跃性(排除误报)
第一步:检查/proc/swaps中各设备的used字段是否随时间增长
执行cat /proc/swaps,记录每行第4列(used,单位KB);等待10秒后再次执行,对比变化。若某设备used值稳定不变,而pgpgout却在涨,说明换出页很快又被换入,或被回收释放——这不是“命中”,是页面生命周期短的表现。
第二步:用vmstat 1 5观察si/so列
si(swap in)和so(swap out)单位为KB/s,直接反映每秒换入换出带宽。连续出现非零so值,且伴随高%wa(I/O wait),即证实Swap I/O正在拖慢系统。











