首页/系统/Linux 内核与性能调优速查/swap 换入换出判读(si/so)
内存与 OOM58 条

swap 换入换出判读(si/so)

vmstat 的 si/so 是换入换出速率;持续非零说明内存紧张,伴随延迟升高时要考虑扩容或调整内存策略,而非只调 swappiness。

什么是 si/so

vmstat 的 si 与 so 分别是每秒换入与换出的内存量(单位 KiB),sar -W 提供同口径的 pswpin/s 与 pswpout/s。少量换出属于正常机制:内核会把长期不用的页挪到 swap 腾出内存。但如果 si/so 持续非零、并伴随响应时间明显上升,就说明内存缺口真实存在,此时调 swappiness 只能改变换页倾向,并不能替代扩容或减少内存占用。

基本信息

视图vmstat 的 si/so,sar -W 的 pswpin/s、pswpout/s
关联指标pgmajfault、/proc/pressure/memory 的 some/full
相关参数vm.swappiness、swap 设备大小与优先级
单位vmstat 输出为 KiB/s
前提系统配置了 swap;无 swap 时这些数字自然为 0
判读持续非零 + 延迟升高 = 内存不足

典型使用场景

  • 服务响应变慢排查:确认是否有持续的换页行为
  • 内存容量评估:用换页速率判断缺口大小
  • 确认 swappiness 调整是否见效,而不是凭感觉
  • 容器与宿主的责任划分:判断压力来自哪一层
  • 故障复盘:把换页高峰与业务延迟曲线对齐

采样与判读

采样与判读
vmstat 1 5                               # 关注 si/so 两列
sar -W 1 3                               # pswpin/s 与 pswpout/s
cat /proc/pressure/memory                # some/full 累积压力
vmstat -s | grep -i -E 'swap|page'       # 累计换页与换入换出总量
grep -E 'pswpin|pswpout' /proc/vmstat    # 原始计数
free -h                                  # 结合可用内存一起判断

现象与结论

现象含义处置方向
si/so 偶发非零正常的内存回收记录基线,不必干预
so 持续偏高内存不足,频繁换出减少占用或扩容
si/so 同时高换页抖动优先扩容,调参仅缓解
pgmajfault 上升缺页需要读盘结合延迟与 IO 指标评估
无 swap 的系统里 si/so 恒为 0,不能据此判断内存充足;应改用 PSI 与可回收内存量作为观察口径。
把 swappiness 调到 0 不能消除内存不足:它只是让内核更不愿意换出,缺口依然存在,最终可能以 OOM 的形式爆发。
没有 swap 或 swap 很小时,观察口径应转向 PSI 的 memory some/full 与 pgmajfault:它们反映内存压力本身,不依赖换页行为,因此在禁用 swap 的机器上同样有效。
换页速率平稳而业务延迟升高时,问题通常不在内存上:应把 P99 曲线与磁盘 IO、CPU 抢占的时间点对齐,避免在错误的方向上扩大内存。

易错点

  • inactive 页偶发换出属正常机制,别把偶发当故障,判断要基于速率与持续时间
  • 持续 swap 抖动说明内存缺口真实存在,调参只能缓解不能替代扩容
  • 只调 swappiness 不看 si/so 的变化,无法验证调整是否有效
  • 无 swap 环境里用 si/so 判断内存充足,忽略了 OOM 才是最终的失败形式

数据来源与参考

  • sysstat 文档 sar(1)/vmstat(8)
  • Linux 内核 Documentation/admin-guide/mm/
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌