Linux Swap 分区管理实战:内存不够时如何及时的抢救

站长们!

有没有遇到过这种尴尬情况:半夜三点,手机突然震动,监控告警:”服务器内存使用率 95%”!你迷迷糊糊爬起来连上服务器,发现某个进程吃内存吃疯了,但又不想直接 kill 掉(万一是什么关键业务呢?)。这时候,Swap 分区就能帮你争取宝贵的排查时间。

直接上干货:Swap 是什么、怎么创建、怎么优化、以及那些踩过的坑。

图片[1]_Linux Swap 分区管理实战:内存不够时如何及时的抢救_鲁小班博客

Swap 到底是啥?

简单说,Swap 就是把硬盘当内存用。物理内存不够时,系统会把一部分不常用的数据从内存挪到硬盘上的 Swap 分区,腾出内存给紧急任务用。

⚠️ 注意:硬盘速度比内存慢几十倍,Swap 只是救急方案,不是长久之计!

第一步我们需要检查当前 Swap 状态

先看看你的服务器有没有 Swap:

我们可以输入 free -h

输出示例:

              total        used        free      shared  buff/cache   available
Mem:           3.9G        2.1G        800M         12M        1.0G        1.5G
Swap:          2.0G          0B        2.0G

如果 Swap 那行全是 0,说明没启用。再用这个命令确认: swapon –show

没输出就是没启用

下面是关于创建 Swap 分区(两种方法)

方法一:Swap 文件(推荐新手)

不用重新分区,直接创建文件就行:以下是相关代码

# 1. 创建 2G 的 Swap 文件(根据需求调整大小)
sudoddif=/dev/zero of=/swapfile bs=1M count=2048

# 2. 设置权限(只有 root 能读写)
sudochmod 600 /swapfile

# 3. 格式化为 Swap
sudo mkswap /swapfile

# 4. 启用 Swap
sudo swapon /swapfile

# 5. 验证是否生效
free -h

Swap 分区(适合新机器初始化)

如果是新服务器,可以单独分一个 Swap 分区:

# 假设 /dev/sda2 是你分好的 Swap 分区
sudo mkswap /dev/sda2
sudo swapon /dev/sda2

设置开机自动挂载

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

验证一下:

cat /etc/fstab | grep swap

看到刚才那行就对了。

调整 Swap 使用策略(关键!)

Linux 有个参数叫 swappiness,控制”多积极使用 Swap”。

  • 值越大(最大 100):越积极用 Swap
  • 值越小(最小 0):尽量不用 Swap
# 查看当前值
cat /proc/sys/vm/swappiness
# 默认通常是 60,对服务器来说太高了!
# 改为 10(内存实在不够才用 Swap)
sudo sysctl vm.swappiness=10
# 永久生效,加到 /etc/sysctl.conf
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

💡 经验值:桌面电脑可以 60,服务器建议 10 甚至 1,数据库服务器直接 0。

Swap 使用场景与避坑

✅ 适合用 Swap 的场景

  1. 内存偶尔峰值:平时够用,偶尔 burst 一下
  2. 低成本服务器:512M/1G 小内存机器
  3. 开发测试环境:不追求极致性能

❌ 不适合用 Swap 的场景

  1. 数据库服务器:MySQL/Redis 用 Swap 会卡到怀疑人生
  2. 高并发 Web 服务:响应时间会飙升
  3. 实时性要求高的场景:比如直播推流、即时通讯

🚨 踩过的坑

https://wxa.wxs.qq.com/tmpl/pn/base_tmpl.html

坑 1:Swap 满了导致系统卡死

# 定期检查 Swap 使用率
free -h | grep Swap
# 如果 used 接近 total,赶紧排查哪个进程吃内存
top -o %MEM

坑 2:禁用 Swap 后忘记删配置

# 临时禁用
sudo swapoff -a
# 记得从 fstab 里删掉对应行,不然重启会卡启动!
sudo nano /etc/fstab

坑 3:Swap 文件权限不对

# 必须是 600,否则系统拒绝启用
ls -l /swapfile
# 应该看到:-rw------- 1 root root

进阶:多个 Swap 设备优先级

可以搞多个 Swap 设备,设置不同优先级:

# 查看当前优先级swapon --show --priority
# 启用时指定优先级(数字越大优先级越高)
sudo swapon /swapfile --priority 100
sudo swapon /dev/sdb2 --priority 50

这样系统会优先用优先级高的,满了再用低的。

一键检查脚本

图片[2]_Linux Swap 分区管理实战:内存不够时如何及时的抢救_鲁小班博客

写了个小脚本,丢到服务器随时检查:

#!/bin/bash
echo "=== Swap 状态检查 ==="
free -h | grep -E "Mem|Swap"echo "
"echo "=== Swappiness 值 ==="
cat /proc/sys/vm/swappiness
echo ""
echo "=== Swap 设备详情 ==="
swapon --show

保存为 check_swap.sh,加执行权限 chmod +x check_swap.sh,随时跑一下。


总结一下

  • 小内存服务器建议配 Swap,2G 内存配 2G Swap 比较合适
  • swappiness 调到 10 以下,别让它太积极
  • 数据库服务器慎用 Swap,宁可加内存
  • 定期检查 Swap 使用率,别等满了才发现
  • fstab 配置要谨慎,错了会卡启动

Swap 不是万能药,但关键时刻真能救命。配置好了放着不用,也比需要的时候没有强。有啥问题评论区见,觉得有用?转发给那个半夜被告警电话叫醒的运维兄弟吧,哈哈哈~~~

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
大神评论 抢沙发

请登录后发表评论

    暂无评论内容