在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个工作日内发放,最后期限是哪天?"
    🚀 微信小程序:排期计算器,你的智能时间管家,告别手动算到崩溃!

相关推荐
Howrun7777 分钟前
关于Linux服务器的协作问题
linux·运维·服务器
小白同学_C1 小时前
Lab3-page tables && MIT6.1810操作系统工程【持续更新】
linux·c/c++·操作系统os
十年磨一剑~2 小时前
Linux程序接收到sigpipe信号崩溃处理
linux
geshifei2 小时前
Sched ext回调3——select_cpu(linux 6.15.7)
linux·ebpf
yunfuuwqi2 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云
迎仔2 小时前
C-算力中心网络隔离实施方法:怎么搞?
运维·网络
代码游侠2 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
你真是饿了2 小时前
6.库制作与原理
linux·服务器
Zach_yuan3 小时前
深入浅出 JSONCpp
linux·服务器·网络·c++
AtoposのCX3304 小时前
Docker运行hello-world镜像失败或超时
运维·docker