服务公告
swap 的 si 与 so:健康判读入门
发布时间:2025-12-25 17:47
## 概念 物理内存吃紧时,内核把不活跃的内存页挪到磁盘上的交换区,腾出内存给更需要的进程;被挪走的页再次被访问时再读回来。这两个方向的流量在 vmstat 与 sar 的输出里就是 si 与 so 两列,单位是每秒块数。判读这两列的形态,是区分内存系统健康与亚健康的基本功,比单看内存使用率靠谱得多:使用率九成但换页为零,系统其实很健康;使用率六成却持续换页,问题已经发生。 ## 原理:偶尔用与持续换的差别 si 与 so 出现并不一定是坏事。内核天生倾向于把长期不用的页换出去,哪怕内存还有富余,这类零星的换页每秒几兆以内,间隔性出现,完全无害,属于正常的内存整理。真正要警惕的是持续性:两列数字长期保持在每秒几十上百兆,同时应用响应变慢,说明物理内存已经装不下工作集,系统在用磁盘冒充内存,每次换页都是毫秒级的磁盘访问,性能自然一落千丈。判读要点就是频率与持续性,而不是有没有。 ## 最小实操 ``` vmstat 1 10 ``` 每秒采样一次共十次,看 si 与 so 两列的走势。配合进程级视图确认谁在被换。 ``` for f in /proc/[0-9]*/status; do awk '/VmSwap|Name/{printf $2" "}END{print ""}' $f; done | sort -k2 -n -r | head ``` 这条命令列出换出量最大的进程,嫌长的写成脚本常备。顺着名单还能看出另一层信息:排在前面的是数据库类常驻服务,说明内存确实不够;是批量任务或泄漏的进程,优先处理它而不是急着扩容。 ## 常见错误 一是见 swap 用量不为零就慌着扩内存,先看换入换出速率再下结论,长期静止的旧换页只是历史痕迹;二是干脆完全关闭交换区,内存紧张时内核失去缓冲手段,直接触发终止进程,损失往往更大;三是把换页发热误判为磁盘故障,方向搞错后折腾一圈存储。顺云云服务器内存水位持续偏高时,先用这套判读分流:零星换页继续观察,持续换页扩内存,把决策依据落在数据形态上。上一篇: 服务器采购从买断到租用的演变
下一篇: 长期运营服的降配与升级时机