在CentOS 7上添加Swap交换空间完整指南

在CentOS 7上添加Swap交换空间完整指南

前言:为何需要Swap空间?

当服务器内存资源告急时,Swap空间能有效防止应用崩溃或数据丢失。这个位于硬盘上的特殊区域可作为内存的应急缓冲区,虽然读写速度不及物理内存,但能避免系统直接终止进程的风险。本文将以CentOS 7为例,手把手教你创建Swap空间。

一、环境准备

  • CentOS 7操作系统
  • 具有sudo权限的非root用户
  • 剩余磁盘空间(建议至少10GB)

二、操作全流程

2.1 检查现有Swap配置

bash 复制代码
# 查看Swap使用概况
swapon -s

# 查看内存与Swap状态(MB单位显示)
free -m

若返回结果中Swap的total值为0,说明尚未配置Swap。

2.2 计算磁盘可用空间

bash 复制代码
df -h

示例输出

复制代码
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        59G   15G   42G  26% /
...

注意:建议Swap大小设置为物理内存的1-2倍,内存密集型应用可适当增加。

2.3 创建Swap文件(以4GB为例)

bash 复制代码
# 创建专用目录防止误删
sudo mkdir /swap_area

# 使用dd命令确保兼容性(fallocate在部分文件系统可能失效)
sudo dd if=/dev/zero of=/swap_area/swapfile bs=1M count=4096

# 设置安全权限
sudo chmod 600 /swap_area/swapfile

2.4 启用Swap空间

bash 复制代码
# 格式化Swap文件
sudo mkswap /swap_area/swapfile

# 立即激活Swap
sudo swapon /swap_area/swapfile

2.5 配置永久生效

bash 复制代码
sudo vim /etc/fstab

在文件末尾追加:

复制代码
/swap_area/swapfile swap swap defaults 0 0

三、高级调优指南

3.1 内存交换倾向性调节

bash 复制代码
# 查看当前swappiness值(默认30)
cat /proc/sys/vm/swappiness

# 临时设置为推荐值(服务器建议10-20)
sudo sysctl vm.swappiness=20

# 永久生效配置
echo "vm.swappiness=20" | sudo tee -a /etc/sysctl.conf

3.2 文件缓存优化

bash 复制代码
# 查看缓存压力值(默认100)
cat /proc/sys/vm/vfs_cache_pressure

# 设置为推荐值(SSD建议50,HDD建议80)
sudo sysctl vm.vfs_cache_pressure=80
echo "vm.vfs_cache_pressure=80" | sudo tee -a /etc/sysctl.conf

四、运维管理技巧

4.1 实时监控命令

bash 复制代码
watch -n 1 'free -m | grep Swap'

4.2 安全禁用Swap

bash 复制代码
# 逐步释放Swap内容(防止内存突增)
sudo swapoff -a

# 重新激活所有Swap
sudo swapon -a

Ps:swapoff -a命令用于临时禁用,不会影响centos服务器正常运行,有测试过。

禁用会先把swap数据移动到内存中(可视化工具可以看到数据转移的过程,swap占用慢慢减少,内容占用慢慢增加),最后才停止。

五、重要注意事项

  1. 云服务器慎用:AWS/阿里云等平台的SSD实例长期使用Swap可能导致磁盘损耗
  2. 性能瓶颈:Swap频繁读写(si/so值高)说明需升级内存
  3. 文件位置:建议将Swap文件存放在独立分区或高速磁盘

总结

通过合理配置Swap空间,可有效提升服务器稳定性。但需注意:

  • Swap不是内存不足的终极解决方案
  • 长期高Swap使用率应考虑升级硬件
  • 定期监控free -mvmstat 1了解内存压力

附录:常用命令速查表

命令 功能描述 示例
swapon 激活Swap swapon /swapfile
swapoff 停用Swap swapoff -a
mkswap 格式化Swap mkswap /swapfile
vmstat 监控交换 vmstat 1

写在最后:

🔥 排期计算,真实场景救急:

  • 产品经理:"这个需求开发要15个工作日,哪天必须提测?"
  • 打工人:"请3天年假,加上周末到底能休几天?"
  • HR:"合同规定20个工作日内发放,最后期限是哪天?"
    🚀 微信小程序:排期计算器,你的智能时间管家,告别手动算到崩溃!

相关推荐
桑榆4164 小时前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu
jerryinwuhan8 小时前
《系统部署与运维》开篇 课程介绍
运维
ltl10 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
我是谁??11 小时前
Ubuntu22.04更换清华源
linux·运维·服务器
Shell运维手记11 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
朴马丁12 小时前
国际与国产PLM在精细化工赛道的布局:2026年主要厂商技术特色
大数据·运维·人工智能·流程行业plm·化工新材料
Elastic 中国社区官方博客13 小时前
Elasticsearch:使用 AI Agent 来创建 workflow
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
测试运维日常笔记13 小时前
Linux系统安装配置TigerVNC服务器完整指南
linux·运维·服务器
喜欢的名字被抢了14 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
雾时之林14 小时前
Linux----cron定时服务
linux·运维·服务器