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

相关推荐
牧以南歌〆2 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
互联网搬砖老肖2 小时前
运维打铁: MongoDB 数据库集群搭建与管理
运维·数据库·mongodb
Antonio9153 小时前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
夜月yeyue3 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
kfepiza3 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
艾伦_耶格宇4 小时前
【docker】-1 docker简介
运维·docker·容器
R.X. NLOS4 小时前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code
cuijiecheng20184 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
独行soc6 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网
java龙王*7 小时前
开放端口,开通数据库连接权限,无法连接远程数据库 解决方案
linux