swap 占了几个 G,内存却还剩不少:Linux 到底什么时候才用 swap
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 有占用是常态,持续换入换出加卡顿才是问题。
- 点赞
- 收藏
- 关注作者
评论(0)