温馨提示×

ubuntu swapper为何频繁使用

小樊
44
2026-10-06 14:47:47
栏目: 智能运维

在 Ubuntu(及其它 Linux 发行版)中,swapper / swap 频繁被使用通常不是“swapper 本身有问题”,而是系统内存压力或配置导致内核频繁把内存页换出到 swap。下面从概念、原因、排查和解决方法几个层面说明。


一、先澄清概念:swapper 是什么

  • swapper 一般指:
    • PID 0 的内核线程(早期叫 swapper,现在多叫 idle)
    • 或 swap 子系统(把内存页换入/换出磁盘)
  • 你看到的“swapper 频繁使用”,通常是指:
    • swapon -s 中 swap 使用量持续增长
    • top / htop 里 si(swap in)/ so(swap out)不为 0
    • 磁盘 IO 增加,系统变卡

二、Ubuntu 频繁使用 swap 的常见原因

1️⃣ 物理内存不足(最常见)

  • 运行程序总内存 > 物理 RAM
  • 内核被迫把不常用内存页写入 swap

判断:

free -h

如果:

  • Mem 几乎用满
  • Swap 持续增长

那就是内存不够。


2️⃣ swappiness 设置偏高

Ubuntu 默认:

cat /proc/sys/vm/swappiness
# 通常是 60

含义:

  • 60 = 内存用到 40% 就可能开始 swap
  • 对桌面/服务器常偏高

3️⃣ 有“长期不用但占内存”的进程

例如:

  • 浏览器标签
  • Java / Docker
  • 数据库缓存
  • 后台服务

这些内存页会被内核认为“可换出”。


4️⃣ 休眠(hibernation)相关

  • 如果启用了 hibernate
  • swap 必须 ≥ 内存
  • 某些情况下会预分配/使用 swap

5️⃣ 内存泄漏或异常进程

  • 某进程内存只增不减
  • OOM 前先疯狂 swap

6️⃣ SSD / NVMe 上 swap 很快(掩盖问题)

  • swap 用得快你才“感觉明显”
  • 实际是内存规划问题

三、如何确认是不是“异常频繁”

查看 swap 使用

swapon --show
free -h

查看换入换出

vmstat 1

关注:

si  so
  • si/so 长期 > 0 → 频繁 swap

查看谁在用内存

top
# 或
htop

按内存排序(Shift+M)


四、解决 / 优化方案

✅ 1. 降低 swappiness(推荐)

sudo sysctl vm.swappiness=10

永久生效:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

桌面用户常设为 10 或 1


✅ 2. 增加物理内存(根本解法)

  • 8G → 16G
  • 服务器建议 ≥ 16G

✅ 3. 控制占用内存的程序

  • 限制 Docker 内存
  • 调整 JVM 堆大小
  • 关闭无用浏览器标签

✅ 4. 使用 zram(强烈推荐 Ubuntu 桌面)

用压缩内存代替磁盘 swap:

sudo apt install zram-config
  • 减少磁盘 IO
  • 明显提升流畅度

✅ 5. 调整或关闭 swap(谨慎)

查看:

sudo swapoff -a

⚠️ 仅在内存充足时 永久关闭需改 /etc/fstab


✅ 6. 检查是否有内存泄漏

sudo apt install smem
smem -s uss -r | head

五、总结一句话

Ubuntu 频繁使用 swap,本质几乎都是“内存不够或 swappiness 太高”,不是 swapper 的错。

如果你愿意,可以贴出:

  • free -h
  • swapon --show
  • vmstat 1 几行输出

我可以帮你精准判断是内存不足还是配置问题。

0 踩