温馨提示×

centos swapper导致卡顿为何

小樊
36
2026-10-06 02:53:31
栏目: 智能运维

在 CentOS(以及其他 Linux 发行版)中,swapper(swap 交换分区/交换文件机制)导致系统卡顿,本质上是因为内存不足时,系统把内存数据写到磁盘 swap 上,而磁盘 I/O 远慢于内存。

下面分点说明原因和常见场景。


一、为什么 swapper 会导致卡顿

1. 内存不足,触发 swap

当物理内存(RAM)耗尽:

  • Linux 把不常用的内存页换出到 swap(磁盘)
  • 当这些页面再次被访问时,再从 swap 读回内存

磁盘速度 << 内存速度,于是:

  • 进程等待 I/O
  • 系统响应变慢
  • 出现“假死”“卡顿”

2. swappiness 设置不合理

CentOS 默认:

cat /proc/sys/vm/swappiness
# 常见为 30 或 60

含义:

  • 值越高 → 越积极使用 swap
  • 值越低 → 尽量不用 swap

如果 swappiness 太高,即使内存还够,也可能提前 swap,导致卡顿。


3. swap 在慢速磁盘上

如果 swap 位于:

  • 机械硬盘(HDD)
  • 云服务器的低性能云盘
  • 和系统盘混用

swap I/O 会非常慢,严重影响性能。


4. 内存泄漏或进程吃内存

常见原因:

  • Java / Python 服务内存未限制
  • 数据库缓存过大
  • 批处理任务一次性加载大量数据

结果:

  • 内存被吃光
  • swapper 频繁工作(swap thrashing)

5. OOM 前的“swap 抖动”

在真正 OOM(Out Of Memory)之前:

  • 系统疯狂 swap in / swap out
  • CPU 在等 I/O
  • 系统几乎不可用

二、如何确认是 swap 导致卡顿

1. 看 swap 使用情况

free -h
swapon -s

2. 看是否有 swap 活动

vmstat 1

关注:

  • si(swap in)
  • so(swap out)

持续非零 → swap 在干活

3. 看磁盘 I/O

iostat -x 1

如果 %util 接近 100%,说明磁盘瓶颈


三、解决与优化方案

✅ 1. 增加物理内存(最根本)

  • 云服务器升级配置
  • 减少并发或任务量

✅ 2. 降低 swappiness

# 临时
sysctl vm.swappiness=10

# 永久
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

一般服务器建议:

  • 数据库服务器:1~10
  • 普通应用:10~30

✅ 3. 限制进程内存

例如:

systemctl set-property nginx.service MemoryMax=1G

或 Docker:

--memory=1g

✅ 4. 使用更快的 swap 设备

  • 用 SSD
  • 或临时关闭 swap(不推荐长期)
swapoff -a

✅ 5. 找出吃内存的进程

top
# 或
ps aux --sort=-%mem | head

四、总结一句话

CentOS 中 swapper 导致卡顿,根本原因是内存不足或 swap 使用过于积极,系统被迫用慢速磁盘代替内存,造成 I/O 瓶颈。

如果你愿意,可以贴出:

  • free -h
  • vmstat 1
  • top

我可以帮你具体判断是不是 swap 的问题。

0 踩