用vmstat看实时swap换入换出速率需运行vmstat 1 5,关键看si(swap-in)和so(swap-out)两列,单位kb/s;加-s m可改为mb更直观,si持续>500需警惕,而swpd值高但si/so为0说明无活跃交换。

用 vmstat 看实时 swap 换入换出速率
直接运行 vmstat 1 5 就能拿到每秒一次、共 5 次的采样,关键就看输出里的 si 和 so 两列——它们单位是 KB/s,分别代表每秒从磁盘读入内存(swap-in)和写入磁盘(swap-out)的数据量。
常见错误现象:只扫一眼 swpd 值以为“用了 swap 就有问题”,其实真正影响性能的是频繁交换。哪怕 swpd 是 2GB,只要 si/so 长期稳定在 0,说明没活跃换页;反过来,si 持续 >500 就得警惕了。
-
vmstat默认单位是 KB,数值密密麻麻难判断,加-S M改成 MB 单位更直观:例如vmstat -S M 2 - 别漏掉参数:不带间隔和次数(如只输
vmstat)只会显示系统启动以来的平均值,对排查当前抖动毫无帮助 -
si/so同时非零很常见,但若so显著高于si,可能意味着进程在大量分配又快速释放匿名页,触发内核频繁回收并换出
对比 free 和 swapon --show 的用途差异
free -h 给你的是静态快照:swap 总量、已用多少、剩多少。它告诉你“有没有用”,但完全不反映“正不正忙”。swapon --show 则列出每个激活的 swap 设备(比如 /dev/sda2 或 /swapfile),附带大小和当前使用率,适合确认 swap 配置是否生效、有没有挂载失败的设备。
容易踩的坑:有人把 free 输出里 “Swap: 2.0G 1.1G 900M” 当成活跃指标,其实这 1.1G 可能是冷数据,躺在 swap 里半年没动过;而 vmstat 的 si/so 才是实打实的“正在发生”的交换行为。
-
swapon --show=NAME,USED,SIZE配合awk算百分比更干净,避免人工心算 -
free的-w参数启用宽模式后列对齐更好,尤其当有多个 swap 设备时 - 如果
swapon --show输出为空,说明根本没启用任何 swap,此时vmstat的si/so必定全为 0,但原因不是“没压力”,而是“没地方换”
为什么不用 top 或 htop 查交换频率
top 和 htop 能看到整体内存压力(比如 %MEM 高、swap 使用量),但它们不暴露 si/so 这类底层换页速率。你顶多看到某进程的 VIRT(虚拟内存大小)很大,却无法判断它是否正在触发 swap 活动。
真实场景中,一个 Java 应用 VIRT 占 8GB,RES(常驻内存)才 2GB,其余 6GB 在 swap 里——top 不会告诉你这 6GB 是刚被换出的还是沉睡已久的。只有 vmstat 的连续采样才能捕捉到换页毛刺。
-
htop按F2进设置可开启 “SWAP” 列,但它只显示该进程当前占用的 swap 大小(来自/proc/[pid]/status的VmSwap:字段),不是速率 -
top的 “%CPU” 和 “%MEM” 都是瞬时值,没有历史趋势,没法识别周期性 swap 波动 - 想关联进程和换页行为?得靠
pidstat -r 1看每个进程的 minor/major fault,再结合vmstat的si/so对比分析
/proc/vmstat 里哪些字段对应 vmstat 的 si/so
vmstat 的数据源头就是 /proc/vmstat。里面 pgpgin 和 pgpgout 是累计页入/页出次数(单位是页,不是 KB),而 pswpin 和 pswpout 才是真正的 swap-in/out 次数。但注意:vmstat 的 si/so 是 KB/s,需要自己换算:
例如,cat /proc/vmstat | grep pswpin 输出 pswpin 123456,两次采样差值为 100,间隔 2 秒,则平均 si ≈ (100 × 4KB) / 2s = 200 KB/s(假设页大小为 4KB)。
- 直接读
/proc/vmstat适合写监控脚本,但手工查不如vmstat直观 -
pgpgin/pgpgout包含文件页和匿名页的全部换入换出,pswpin/pswpout专指 swap 设备操作,更精准 - 某些内核版本(如 5.10+)新增
pgmajfault字段,可辅助判断 major fault 是否引发 swap,但需结合si看是否真落到磁盘
si 和 so 的波动节奏比绝对值更重要——持续平稳的 50 KB/s 可能无害,但间歇性冲到 5MB/s 的尖峰往往意味着内存压力突变或配置失当。别只盯着数字,要盯住它怎么跳。











