swap 占了几个 G,内存却还剩不少:Linux 到底什么时候才用 swap

举报
yd_241984912 发表于 2026/11/04 18:11:12 2026/11/04
【摘要】 free -h 一看,Swap 那一行 used 几个 G,但 Mem 那一行还剩不少。第一反应往往是内存不够了、该加内存了。先别急着下这个结论,swap 有占用,不等于内存不够。swap 不只在内存耗尽时才用。内核有个 swappiness,默认 60,它管的是“换出匿名页”和“回收文件页缓存”之间的倾向。有些内存页被进程申请后就很少再碰,比如某个服务启动时初始化的一堆堆页,内核会把这类长...

free -h 一看,Swap 那一行 used 几个 G,但 Mem 那一行还剩不少。第一反应往往是内存不够了、该加内存了。先别急着下这个结论,swap 有占用,不等于内存不够。

swap 不只在内存耗尽时才用。内核有个 swappiness,默认 60,它管的是“换出匿名页”和“回收文件页缓存”之间的倾向。有些内存页被进程申请后就很少再碰,比如某个服务启动时初始化的一堆堆页,内核会把这类长时间不动的匿名页主动换到 swap 上,哪怕内存还剩不少。这是一种腾地方的策略,不是内存告罄的信号。

判断要不要管,看两个数:一个是 si/so,也就是每秒换入换出的量,vmstat 1 就能看到;一个是实际卡不卡。swap 占了几个 G、但 si/so 长期是 0,说明只是静置页被换出去了,对性能没影响,不用理。反过来,si/so 持续很高、同时 load 往上走、应用明显变慢,那才是真的内存压力。

真有压力时再动手:先看是谁在用 swap,没有 smem 就直接读 /proc/进程号/status 里的 VmSwap,一行命令就能把所有进程的 swap 占用列出来。找到膨胀的进程再决定是重启、限流还是加内存。

swappiness 可以调低,比如改成 10,但它只是倾向、不是开关,调到 0 也不等于禁用 swap;更不要一看到 swap 有数字就直接关 swap,关了反而失去缓冲,内存真满时就直接触发 OOM killer 杀进程。

一句话总结:看 swap 别只看 used 那一栏,要看 si/so 和实际卡顿。swap 有占用是常态,持续换入换出加卡顿才是问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。