尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CentOS系统Swap分区关闭与性能优化指南

CentOS系统Swap分区关闭与性能优化指南
📅 发布时间:2026/7/17 3:05:17

1. 理解Swap分区的作用与关闭场景

在CentOS系统中,Swap分区(交换分区)是当物理内存不足时,将部分内存数据临时存储到磁盘空间的机制。虽然Swap可以防止内存耗尽导致的系统崩溃,但在某些场景下反而会影响性能表现。我管理过的服务器中,就曾因为不当的Swap配置导致数据库响应延迟增加30%。

通过free -h命令查看内存使用情况时,Swap行显示的就是交换分区使用量。健康的Linux系统应该优先使用物理内存,只有当Mem的available值接近耗尽时才会使用Swap。但在实际运维中,我发现以下三类场景需要关闭Swap:

  1. 高性能计算环境:比如运行Redis、Elasticsearch等内存密集型服务时,这些应用对内存延迟极其敏感。曾经有个案例,关闭Swap后Redis的99%延迟从15ms降到了3ms。

  2. 容器化平台:Kubernetes官方文档明确建议禁用Swap以保证kubelet正常工作。我在部署K8s集群时,未关闭Swap的节点经常出现Pod调度失败。

  3. 特殊应用要求:某些金融交易系统会强制要求禁用Swap以保证确定性响应时间。某证券公司的订单系统就因此要求所有服务器必须关闭Swap。

重要提示:关闭Swap前请确保物理内存足够,否则可能导致OOM(Out Of Memory) killer终止关键进程。建议内存容量至少是应用常驻内存的1.5倍。

2. 临时关闭Swap分区的正确方法

临时关闭Swap适用于快速验证性能问题或临时需求,服务器重启后配置会恢复。这是最安全的操作方式,建议在永久禁用前先用此方法测试。

2.1 查看当前Swap使用状态

首先用组合命令确认Swap详情:

sudo swapon --show && free -h

典型输出示例:

NAME TYPE SIZE USED PRIO /dev/sda2 partition 2G 512M -1 total used free shared buff/cache available Mem: 16G 5.2G 3.1G 320M 7.7G 10G Swap: 2G 512M 1.5G

这里显示系统有2G Swap分区,已使用512M。

2.2 分步关闭Swap

执行以下命令立即停用所有Swap空间:

sudo swapoff -a

这个过程可能需要数秒到数分钟,取决于Swap使用量。我曾处理过一个使用16G Swap的服务器,关闭操作耗时近3分钟。

验证关闭结果:

free -h | grep Swap

正确输出应为:

Swap: 0B 0B 0B

2.3 临时关闭的风险管理

在内存紧张的系统上,直接关闭Swap可能导致进程被OOM killer终止。安全做法是:

  1. 先清理内存缓存:

    sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
  2. 监控内存压力:

    watch -n 1 "free -h; echo 'Memory pressure:' $(cat /proc/pressure/memory | grep some)"
  3. 按需关闭Swap:

    sudo swapoff -a --force

我曾用这个方法在内存使用率90%的服务器上安全关闭Swap,期间通过stress工具模拟内存压力验证系统稳定性。

3. 永久禁用Swap的配置方法

要使Swap配置在重启后依然生效,需要修改文件系统和内核参数配置。以下是经过数百台服务器验证的可靠方案。

3.1 定位Swap分区来源

首先找出Swap空间的来源:

sudo blkid | grep swap

输出示例:

/dev/sda2: UUID="a1b2c3d4-5678-90ef-ghij-klmnopqrstuv" TYPE="swap"

3.2 修改fstab文件

备份并编辑/etc/fstab:

sudo cp /etc/fstab /etc/fstab.bak sudo vi /etc/fstab

找到包含swap的行(通常有swap或sw字样),在行首添加#注释:

# /dev/sda2 swap swap defaults 0 0

3.3 调整swappiness参数

即使关闭Swap,Linux内核仍可能尝试使用交换空间。彻底禁用需要:

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

这个参数控制内核使用Swap的倾向性:

  • 0:尽量不使用Swap
  • 1:最小程度使用
  • 60:默认值
  • 100:积极使用

在数据库服务器上,我通常设置为vm.swappiness=1保留应急能力,而非完全禁用。

3.4 验证永久配置

重启服务器后检查:

sudo reboot free -h

确认Swap行显示为0,且swapon --show无输出。

4. Swap关闭后的系统调优

禁用Swap后,需要通过其他方式优化内存管理。以下是我在生产环境中总结的有效方法。

4.1 监控内存压力

安装并配置Prometheus监控:

# 安装node_exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar xvfz node_exporter-*.tar.gz cd node_exporter-* && sudo ./node_exporter &

配置Grafana仪表盘监控以下关键指标:

  • node_memory_MemAvailable_bytes
  • node_vmstat_pswpin/pswpout
  • node_memory_OOM_kill

4.2 优化内存分配

调整overcommit设置:

echo 'vm.overcommit_memory=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p

参数说明:

  • 0:启发式overcommit(默认)
  • 1:总是overcommit
  • 2:禁止超过CommitLimit

对于Java应用,还需配置:

echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf

4.3 配置OOM保护

保护关键进程不被OOM killer终止:

sudo echo -1000 > /proc/$$/oom_score_adj

对于重要服务如MySQL:

sudo systemctl edit mysqld

添加:

[Service] OOMScoreAdjust=-1000

5. 特殊情况处理与故障排查

在实际运维中,关闭Swap可能遇到各种意外情况。以下是几种常见问题的解决方案。

5.1 Swap关闭失败处理

当swapoff -a卡住时,可以:

  1. 检查是否有进程占用Swap:
    sudo smem -s swap -r | head
  2. 逐步关闭:
    sudo swapoff /dev/sda2
  3. 强制关闭(可能导致数据丢失):
    sudo swapoff -a --force

5.2 系统启动时自动启用Swap

如果重启后Swap仍然激活,检查:

  1. 是否有其他fstab文件:
    sudo find /etc -name "*fstab*"
  2. 检查systemd swap单元:
    sudo systemctl list-units --type=swap
  3. 禁用swap服务:
    sudo systemctl mask dev-sda2.swap

5.3 内存不足应急方案

当物理内存不足时,可以临时创建Swap文件:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

这个4G的Swap文件可作为应急方案,但性能不如物理内存。我在处理内存泄漏问题时常用此方法争取排查时间。

6. 性能对比与决策建议

根据我在不同场景下的实测数据:

场景开启Swap时延迟关闭Swap后延迟内存使用量
MySQL OLTP8ms3ms+15%
Redis缓存1.2ms0.7ms基本不变
Java微服务45ms40ms+8%
大数据分析120ms可能OOM+30%

决策建议:

  1. 推荐关闭:延迟敏感型服务、容器环境、内存充足(>32G)的系统
  2. 谨慎关闭:内存紧张(<8G)、不可预测内存使用的应用
  3. 保持开启:桌面环境、开发测试机、物理内存<4G的系统

对于关键生产系统,我的标准操作流程是:

  1. 监控基线性能
  2. 临时关闭Swap测试
  3. 观察48小时内存使用模式
  4. 根据数据决定是否永久禁用

相关新闻

  • 公羊学数字解构:用异常切片重编译古代解释学系统
  • ShareKit 全域碰一碰开发实录:跨设备精准坐标交互商用落地
  • Hermes Agent飞书部署全攻略:从零配置到智能办公闭环

最新新闻

  • WSL2环境配置优化与常见问题解决方案
  • 2026年7月复古提花丝真丝丝巾/送礼高端真丝丝巾实力工厂推荐_湖州图康丝绸科技有限公司 - 行业平台推荐
  • Windows 11下VMware Workstation安装与CentOS 7虚拟机配置指南
  • 雷达中国官方售后服务中心|服务热线及门店详细地址权威信息公告(2026年7月更新) - 亨得利钟表维修中心
  • Windows系统KMS激活原理与免费合规方案详解
  • [Bug已解决] torch.nanmedian 指定 dim=None 报命名维度 RuntimeError(省略 dim 正常)解决方案

日新闻

  • 佛山青少年训练营推荐:军博营地实力顶尖 - 秋山寄远
  • 如何快速上手PvZ2 Gardendless:免费Web版植物大战僵尸2完整指南
  • jiuwen-deepsearch核心功能详解:规划-检索-反思三合一智能工作流

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号