温馨提示×

debian swapper为何满负荷

小樊
37
2026-09-10 08:39:15
栏目: 智能运维

在 Debian(及所有 Linux)系统中,swapper(swap 分区/文件)满负荷通常不是“swapper 本身有问题”,而是内存压力导致系统大量使用 swap。下面从原因、诊断、解决几个层面说明。


一、什么是 swapper 满负荷

  • swapper 指 swap 空间(swap 分区或 swap 文件)
  • “满负荷” = swap 使用率接近 100%,且 si/so(swap in/out)持续很高
  • 这通常说明:物理内存(RAM)已经不够用

二、常见原因

1. 内存不足(最常见)

  • 运行程序太多 / 内存泄漏
  • 数据库、Java、Docker、编译任务等吃内存
  • 同时运行多个大型服务

2. swappiness 设置过高

  • Debian 默认 swappiness=60
  • 在内存还够时就提前使用 swap,造成“看起来满”

查看:

cat /proc/sys/vm/swappiness

3. 内存泄漏

  • 某进程逐渐吃光内存
  • 最终被迫 swap

4. 服务配置不合理

  • MySQL / PostgreSQL 缓存过大
  • JVM 堆内存设置超过物理内存
  • Nginx + PHP 进程数过多

5. 僵尸/异常进程

  • 死循环
  • 被攻击(如 fork 炸弹)

三、如何快速诊断

1. 看整体资源

top

htop

关注:

  • MEM%
  • SWAP
  • load average

2. 看 swap 使用情况

free -h
swapon --show

3. 找出吃内存的进程

ps aux --sort=-%mem | head

4. 看 swap 谁在用

for pid in $(ls /proc | grep '^[0-9]'); do
  echo -n "$pid "; grep VmSwap /proc/$pid/status 2>/dev/null
done | sort -k2 -n -r | head

四、解决方法

✅ 1. 释放 swap(临时)

sudo swapoff -a
sudo swapon -a

⚠️ 前提:有足够空闲内存,否则会卡死


✅ 2. 降低 swappiness(推荐)

sudo sysctl vm.swappiness=10

永久生效:

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

✅ 3. 限制或优化服务

  • 降低 MySQL innodb_buffer_pool_size
  • 调整 JVM -Xmx
  • 减少 Docker / PHP-FPM 进程数

✅ 4. 增加内存或 swap

  • 加物理内存(根本解决)
  • 或增加 swap 文件:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

✅ 5. 重启异常进程

如果是某个服务导致:

systemctl restart xxx

五、一句话总结

Debian swapper 满负荷 = 内存不够用,系统在“拿硬盘当内存用”
重点不是 swap,而是找出谁在吃内存

如果你愿意,可以把下面命令的输出发我,我可以直接帮你分析:

free -h
top -b -n1 | head -20

0