AlmaLinux 8/9、CentOS 8、RHEL 8/9、Rocky Linux 等所有主流Linux发行版,完美解决内存不足服务器卡死问题
问题背景
云服务器默认无交换空间/swap分区,当物理内存不足时,会触发系统IO满载、服务器卡死,SSH/VNC均无法连接,只能重启。添加swap是根治该问题的最优解。
核心说明
swap大小推荐:物理内存的1~2倍(例如2G内存创建2G swap,4G内存创建4G swap)
swappiness值:推荐配置60,表示系统会合理使用swap,既不滥用也不闲置
本次配置为永久生效,重启服务器后swap不会失效,无需重新配置
一、前置检查(执行配置前必做)
1. 查看当前swap空间状态(确认是否已有swap)
swapon --show
或 更直观的内存+swap总览
free -h
无输出 / swap行显示0B → 无swap,可继续配置;已有swap则无需重复配置
2. 查看磁盘剩余空间(确保有足够空间创建swap文件)
df -h
二、完整手动配置步骤(逐条执行,root权限/带sudo均可)
步骤1:创建swap交换文件(示例创建2G,可自行修改大小)
# 创建2G的swap文件,修改数字即可调整大小,例如4G则改为 4Gfallocate -l 2G /swapfile# 备选命令(兼容所有系统,无fallocate命令时用)# dd if=/dev/zero of=/swapfile bs=1G count=2
步骤2:设置swap文件安全权限(必须执行,安全关键)
chmod600 /swapfile
权限600:仅root用户可读写,防止非授权用户篡改,避免系统安全风险
步骤3:格式化文件为swap格式
mkswap /swapfile
步骤4:临时启用swap文件
swapon /swapfile
步骤5:配置开机自动挂载swap(永久生效核心步骤)
echo'/swapfile none swap defaults 0 0' >> /etc/fstab
将swap挂载信息写入系统挂载配置文件,重启后自动加载
步骤6:配置系统swappiness参数(设置swap使用倾向)
6.1 临时生效(当前会话生效)
sysctl vm.swappiness=60
6.2 永久生效(重启后依然生效)
echo'vm.swappiness=60' >> /etc/sysctl.conf# 刷新配置,立即生效sysctl -p
swappiness值说明:
0 :系统尽可能只用物理内存,绝对不用swap
60 :系统均衡使用物理内存和swap,推荐值
100:系统优先使用swap,不推荐
三、验证配置是否成功(必执行)
# 方式1:查看swap详细信息swapon --show# 方式2:查看内存+swap总览(最直观)free -h
成功标志:输出结果中Swap列有对应的大小、已用、可用数值,而非0
四、补充常用命令
✅ 关闭swap(临时关闭,重启失效)
swapoff /swapfile
❌ 删除swap(彻底删除,如需回滚)
swapoff /swapfile && rm-rf /swapfilesed-i'/swapfile/d' /etc/fstabsed-i'/vm.swappiness=60/d' /etc/sysctl.confsysctl -p
五、注意事项
swap文件性能略低于swap分区,但对云服务器场景完全够用,优先选择文件方式,无需分区格式化磁盘
不要创建过大的swap(超过物理内存2倍),会导致磁盘IO过载,反而降低性能
一键执行脚本文件 add_swap.sh
✅ 脚本功能:全自动完成所有配置,无需手动逐条执行,一键创建2G swap+永久生效+配置swappiness=60+自动验证✅ 脚本兼容:所有Linux发行版,自动判断root权限,自动跳过已配置swap的情况✅ 可直接修改脚本内的 SWAP_SIZE=2G 调整swap大小,比如改成4G
#!/bin/bash# 一键配置Linux swap交换空间 解决内存不足导致的卡死问题# 配置大小可修改下方 SWAP_SIZE 的值,推荐物理内存的1-2倍# 执行方式:chmod +x add_swap.sh && sh add_swap.sh# 定义变量:swap文件路径+大小,可自行修改大小(例如4G改为4G)SWAP_FILE="/swapfile"SWAP_SIZE="2G"SWAPPINESS=60# 检查是否为root用户if [ $UID-ne0 ]; thenecho-e"\033[31m错误:请使用root用户或 sudo 执行该脚本!\033[0m"exit1fi# 检查是否已存在swapif swapon --show | grep-q$SWAP_FILE; thenecho-e"\033[32m检测到已配置swap空间,无需重复配置!\033[0m" free -hexit0fiecho-e"\033[34m====================================\033[0m"echo-e"\033[34m开始配置swap交换空间,大小:$SWAP_SIZE\033[0m"echo-e"\033[34m====================================\033[0m"# 1. 创建swap文件echo-e"\033[33m1. 创建swap文件...\033[0m"if command -v fallocate &>/dev/null; then fallocate -l$SWAP_SIZE$SWAP_FILEelse dd if=/dev/zero of=$SWAP_FILEbs=1G count=${SWAP_SIZE%G}fi# 2. 设置swap文件权限echo-e"\033[33m2. 设置swap文件安全权限...\033[0m"chmod600$SWAP_FILE# 3. 格式化swap文件echo-e"\033[33m3. 格式化swap文件...\033[0m"mkswap $SWAP_FILE# 4. 启用swap文件echo-e"\033[33m4. 启用swap文件...\033[0m"swapon $SWAP_FILE# 5. 配置开机自动挂载swapecho-e"\033[33m5. 配置永久生效,写入fstab...\033[0m"echo"$SWAP_FILE none swap defaults 0 0" >> /etc/fstab# 6. 配置swappiness参数并永久生效echo-e"\033[33m6. 配置swappiness=$SWAPPINESS 内存策略...\033[0m"sysctl vm.swappiness=$SWAPPINESS &>/dev/nullecho"vm.swappiness=$SWAPPINESS" >> /etc/sysctl.confsysctl -p &>/dev/nullecho-e"\033[32m====================================\033[0m"echo-e"\033[32m✅ swap交换空间配置完成!\033[0m"echo-e"\033[32m====================================\033[0m"# 验证配置结果echo-e"\033[36m当前内存+swap状态:\033[0m"free -hecho-e"\033[36m当前swap详细信息:\033[0m"swapon --showecho-e"\033[32m🎉 配置成功,重启服务器后依然生效!\033[0m"
使用说明(重要,两步搞定)
✅ 第一步:服务器上创建脚本并赋予执行权限
# 新建脚本文件vim add_swap.sh# 把上面的add_swap.sh脚本内容全部复制进去,保存退出(esc → :wq)# 赋予执行权限chmod+x add_swap.sh
✅ 第二步:一键执行脚本
# 直接执行,自动完成所有配置sh add_swap.sh
✅ 可选:修改swap大小
如果需要创建4G的swap,只需要编辑脚本,修改这一行即可:
SWAP_SIZE="4G"