当 CentOS 系统的 Swap 被占满 时,通常意味着物理内存(RAM)不足,系统开始频繁使用磁盘上的交换空间,这会导致系统性能下降,甚至卡死。
处理 Swap 满的问题,需要分 临时应急 和 根本解决 两种情况来处理。
free -h
或
swapon -s
top
或
htop # 如果没有安装:yum install htop -y
ps aux --sort=-%mem | head
⚠️ 前提:物理内存足够剩余,否则会 OOM
swapoff -a
swapon -a
如果提示无法关闭(内存不足):
swapoff: /dev/sda2: swapoff failed: Cannot allocate memory
说明 物理内存也快满了,不能这样操作。
sync
echo 3 > /proc/sys/vm/drop_caches
仅释放 page cache、dentries、inodes,不影响运行中的程序。
例如 MySQL / Java / Docker:
systemctl restart mysql
这是最根本的方法。
dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
常见原因:
-Xmx 设置过大innodb_buffer_pool_size 过大示例(Docker):
docker run -m 512m --memory-swap=1g ...
echo 10 > /proc/sys/vm/swappiness
永久生效:
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
默认是 30~60,数值越小越优先使用物理内存。
| 场景 | 建议 |
|---|---|
| Swap 满但内存还有 | swapoff -a && swapon -a |
| 内存 + Swap 都满 | 杀进程 / 扩容 |
| 临时云服务器 | 增加 Swap |
| 数据库服务器 | 减少缓存参数 |
| Java 应用 | 降低 -Xmx |
如果你愿意,可以把以下信息发我,我可以精准判断原因:
free -h 输出top 前几行我可以帮你给出最优配置方案。