温馨提示×

ubuntu swap卡顿原因

小樊
45
2026-09-01 07:40:26
栏目: 智能运维

在 Ubuntu(以及其他 Linux 发行版)中,使用 swap 时出现“卡顿”是非常常见的现象,本质原因是:系统被迫使用磁盘代替内存,而磁盘速度远低于内存。下面从原理到具体原因系统说明。


一、为什么 swap 会导致卡顿(核心原理)

  • 内存(RAM):速度极快(GB/s 级)
  • Swap(磁盘/SSD):速度慢得多(HDD 几 MB/s,SSD 也远慢于 RAM)

当物理内存不足时:

  1. 系统把不常用的内存页写到 swap
  2. 当这些页面再次被访问时,必须从磁盘读回内存
  3. 应用线程被阻塞,等待 I/O

结果:界面卡、鼠标动不了、程序无响应


二、Ubuntu 中常见的 swap 卡顿原因

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

  • 开太多浏览器标签
  • 跑 Docker / 虚拟机
  • 编译大型项目
  • 内存小于 4–8GB 却跑桌面环境

✅ 表现:

  • 卡顿前风扇转
  • free -h 看到 swap 被大量使用

2. swappiness 设置不合理

Ubuntu 默认:

cat /proc/sys/vm/swappiness
# 通常是 60
  • 60 表示:内存用到 40% 就可能开始 swap
  • 对桌面系统偏高

✅ 结果:

  • 明明还有内存,却开始 swap
  • 导致“莫名其妙卡”

3. 使用了 HDD 作为 swap

  • HDD 随机读写极慢
  • 一旦开始 swap,系统几乎“假死”

✅ 对比:

  • HDD swap:非常卡
  • SATA SSD:可接受
  • NVMe SSD:影响较小

4. Swap 文件/分区碎片化或位置差

  • swap 文件在 HDD 上
  • 文件碎片化严重
  • 磁盘本身 IO 已饱和

5. 系统“抖动”(Thrashing)

  • 内存极小
  • 不断 swap in / swap out
  • CPU 大量时间花在等磁盘

✅ 表现:

  • 磁盘灯常亮
  • 系统几乎不可用

6. zram / zswap 未启用(内存小机器)

Ubuntu 默认:

  • 20.04+ 桌面版:通常用 swap file
  • 服务器版:可能没有压缩 swap

❌ 没用 zram:

  • 直接写磁盘
  • 卡顿更严重

三、如何判断是否 swap 导致卡顿

1. 查看内存和 swap

free -h

如果:

  • Mem 用满
  • Swap 正在增长

2. 查看 IO 等待

top

%wa(IO wait)是否很高

3. 看谁在用 swap

sudo smem -s swap -r | head

四、解决 / 缓解方案(实用)

✅ 1. 降低 swappiness(强烈推荐)

sudo sysctl vm.swappiness=10

永久生效:

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

✅ 2. 增加物理内存(根本方案)

  • 8GB 是桌面最低舒适线
  • 16GB 更稳

✅ 3. 使用 SSD / NVMe 做 swap

避免 HDD swap


✅ 4. 启用 zram(小内存神器)

sudo apt install zram-tools

自动压缩内存,减少磁盘 swap


✅ 5. 限制内存占用程序

  • 浏览器标签数
  • Docker 内存限制
  • 关闭无用服务

五、一句话总结

Ubuntu swap 卡顿的本质是:内存不够 → 系统用慢速磁盘代替内存 → 程序等待 I/O → 卡死感

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • 内存大小
  • 是否 SSD
  • 卡顿时在干什么

我可以给你针对性的优化方案

0