如何快速解决CentOS系统中Swap资源占用过高的问题?

更新于
2026-09-29 13:54:02
2阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

为什么CentOS程序的Swap资源会被占满?不过,

当你发现服务器变得异常缓慢、应用响应延迟、甚至出现OOM杀死进程时很可能是因为物理内存不足。程序被迫频繁使用Swap分区。此时Swap使用率飙升,直接拖慢磁盘I/O,导致整体性能骤降。

典型痛点

  • 内存不足导致频繁换页:程序卡顿、响应时间变长。
  • 磁盘I/O激增:Swap读写消耗大量IOPS,影响其他服务。
  • 业务不稳定:关键进程可能被OOM killer终止。怎么说呢,
  • 运维压力大:需要频繁登录机器查看top/free,手动干预。

快速定位占用Swap最高的进程

先用以下命令找出“罪魁祸首”:

如何快速解决CentOS系统中Swap资源占用过高的问题?
# 查看每个进程的Swap使用量。并按降序排列
awk '{printf "%-10s %-6s %-8s %s
",$1,$2,$6,$0}' /proc/*/status 2>/dev/null |
grep -E 'VmSwap|Name|Pid' |
awk '/VmSwap/{swap=$2;
pid=$1} /Name/{name=$2} /Pid/{if printf "%-6s %-8s %6s KB %s
",pid,name,swap,$0}' |
sort -k4 -nr | head -n 10

或者更简洁的方式:

ps aux --sort=-%mem | head -n 10 # 按内存使用率排序。往往也是Swap大户
free -h # 查看整体内存/Swap使用情况

立即缓解Swap压力的急救方案

1. 暂时关闭并重新启用所有Swap分区

- 这样可以强制程序把目前驻留在Swap中的数据写回内存,随后重新挂载Swap。

sudo swapoff -a # 关闭所有swap
sleep 10 # 给程序一点时间把数据回写
sudo swapon -a #
启用swap

2. 调整Swappiness参数

- 默认值通常是60。调低到10~20可以显著减少Swap的使用频率。

如何快速解决CentOS系统中Swap资源占用过高的问题?
# sudo sysctl vm.swappiness=10 # 生效直至下次重启
# sudo sysctl -p # 若已写入/etc/sysctl.conf则立即生效

- 永久生效:在/etc/sysctl.conf中添加或修改vm.swappiness = 10

.cleanup 高占用swap的进程

- 若确认某个进程异常占用大量swap且可以安全重启,可直接杀掉。

# sudo kill -9  # 用上面找到的PID替换
# free -h # 检查swap是否下降
# sudo yum install zram-config # CentOS 7/8 已有此包
# sudo systemctl enable zram-config
# sudo systemctl start zram-config
# cat /sys/block/zram0/disksize # 查看分配的压缩空间大小
  • .定期检查`free -h`、`vmstat`、`iostat`等指标;话说回来,..设置报警阈值;..审计业务代码与容器配置,排除内存泄漏;..对Java、Python等语言调整堆栈大小或GC策略;..保持程序及内核更新,以获得更好的页面回收算法。,
。

标签:CentOS

为什么CentOS程序的Swap资源会被占满?不过,

当你发现服务器变得异常缓慢、应用响应延迟、甚至出现OOM杀死进程时很可能是因为物理内存不足。程序被迫频繁使用Swap分区。此时Swap使用率飙升,直接拖慢磁盘I/O,导致整体性能骤降。

典型痛点

  • 内存不足导致频繁换页:程序卡顿、响应时间变长。
  • 磁盘I/O激增:Swap读写消耗大量IOPS,影响其他服务。
  • 业务不稳定:关键进程可能被OOM killer终止。怎么说呢,
  • 运维压力大:需要频繁登录机器查看top/free,手动干预。

快速定位占用Swap最高的进程

先用以下命令找出“罪魁祸首”:

如何快速解决CentOS系统中Swap资源占用过高的问题?
# 查看每个进程的Swap使用量。并按降序排列
awk '{printf "%-10s %-6s %-8s %s
",$1,$2,$6,$0}' /proc/*/status 2>/dev/null |
grep -E 'VmSwap|Name|Pid' |
awk '/VmSwap/{swap=$2;
pid=$1} /Name/{name=$2} /Pid/{if printf "%-6s %-8s %6s KB %s
",pid,name,swap,$0}' |
sort -k4 -nr | head -n 10

或者更简洁的方式:

ps aux --sort=-%mem | head -n 10 # 按内存使用率排序。往往也是Swap大户
free -h # 查看整体内存/Swap使用情况

立即缓解Swap压力的急救方案

1. 暂时关闭并重新启用所有Swap分区

- 这样可以强制程序把目前驻留在Swap中的数据写回内存,随后重新挂载Swap。

sudo swapoff -a # 关闭所有swap
sleep 10 # 给程序一点时间把数据回写
sudo swapon -a #
启用swap

2. 调整Swappiness参数

- 默认值通常是60。调低到10~20可以显著减少Swap的使用频率。

如何快速解决CentOS系统中Swap资源占用过高的问题?
# sudo sysctl vm.swappiness=10 # 生效直至下次重启
# sudo sysctl -p # 若已写入/etc/sysctl.conf则立即生效

- 永久生效:在/etc/sysctl.conf中添加或修改vm.swappiness = 10

.cleanup 高占用swap的进程

- 若确认某个进程异常占用大量swap且可以安全重启,可直接杀掉。

# sudo kill -9  # 用上面找到的PID替换
# free -h # 检查swap是否下降
# sudo yum install zram-config # CentOS 7/8 已有此包
# sudo systemctl enable zram-config
# sudo systemctl start zram-config
# cat /sys/block/zram0/disksize # 查看分配的压缩空间大小
  • .定期检查`free -h`、`vmstat`、`iostat`等指标;话说回来,..设置报警阈值;..审计业务代码与容器配置,排除内存泄漏;..对Java、Python等语言调整堆栈大小或GC策略;..保持程序及内核更新,以获得更好的页面回收算法。,
。

标签:CentOS