版本:v2.0.0
更新日期:2024年
适用环境:KVM / OpenVZ / LXC 等主流 VPS 架构
- Swap 管理:添加、删除、调整 Swap 大小
- 智能推荐:根据内存自动计算推荐 Swap 大小
- 内存优化:swappiness、vfs_cache_pressure 参数调优
- ZRAM 支持:内存压缩技术,比传统 Swap 更快
- 多架构支持:KVM 标准方式 + OpenVZ fake_meminfo 方式
- 命令行模式:支持快捷命令,适合脚本调用
# 下载并运行
sudo bash swap.sh# 查看当前 Swap 状态
sudo bash swap.sh --status
# 添加 2GB Swap
sudo bash swap.sh --add 2048
# 删除 Swap
sudo bash swap.sh --delete
# 查看帮助
sudo bash swap.sh --help# 如果上传到服务器可用此方式
curl -sSL https://your-server.com/swap.sh | sudo bash╔══════════════════════════════════════════════════════════════╗
║ Linux VPS 一键 Swap 管理脚本 v2.0.0 ║
╚══════════════════════════════════════════════════════════════╝
[Swap 管理]
1. 添加 Swap - 创建新的 Swap 文件
2. 删除 Swap - 移除现有 Swap
3. 调整 Swap 大小 - 修改 Swap 容量
4. 查看 Swap 状态 - 显示完整内存信息
[内存优化]
5. 设置 swappiness - 控制 Swap 使用倾向
6. 设置 vfs_cache_pressure - 控制缓存回收
7. 一键优化(推荐配置) - 应用最佳参数
[高级功能]
8. ZRAM 压缩内存管理 - 内存压缩技术
0. 退出
| 物理内存 | 推荐 Swap 大小 | 说明 |
|---|---|---|
| ≤ 512MB | 1024MB (1GB) | 内存的 2 倍 |
| 1GB | 2048MB (2GB) | 内存的 2 倍 |
| 2GB | 4096MB (4GB) | 内存的 2 倍 |
| 4GB | 4096MB (4GB) | 内存的 1 倍 |
| 8GB+ | 8192MB (8GB) | 内存的 1 倍 |
脚本会自动根据当前内存计算推荐值
控制内核使用 Swap 的倾向程度。
| 值 | 说明 |
|---|---|
| 0 | 尽可能不使用 Swap(除非内存耗尽) |
| 10 | 推荐值(服务器) - 优先使用物理内存 |
| 60 | 默认值(桌面系统) |
| 100 | 积极使用 Swap |
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时修改
echo 10 > /proc/sys/vm/swappiness
# 永久修改(写入 /etc/sysctl.conf)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p控制内核回收 inode/dentry 缓存的倾向。
| 值 | 说明 |
|---|---|
| 0 | 永不回收(可能导致内存问题) |
| 50 | 推荐值 - 保留更多缓存 |
| 100 | 默认值 |
| 200 | 积极回收缓存 |
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5ZRAM 是 Linux 内核提供的内存压缩技术:
- 原理:在内存中创建压缩的块设备作为 Swap
- 优点:比磁盘 Swap 快得多,适合 SSD VPS
- 缺点:占用 CPU 进行压缩/解压
- 建议:设置为物理内存的 25%-50%
# 手动启用 ZRAM (512MB)
modprobe zram
echo "512M" > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon -p 100 /dev/zram0
# 查看 ZRAM 状态
zramctl- 完全支持所有 Swap 操作
- 使用标准 swapfile 方式
- 使用 fake_meminfo 方式模拟 Swap
- 实际上是将部分容器内存显示为 Swap
- 重启后需要重新挂载(脚本已自动添加 crontab)
- 支持情况取决于宿主机配置
- 部分功能可能受限
# 检查文件系统是否支持
df -T /
# 如果是 XFS/Btrfs,脚本会自动使用 dd 而非 fallocateSwap 正在被使用时,关闭需要将数据写回内存:
# 查看 Swap 使用情况
free -h
# 强制关闭所有 Swap
swapoff -a# 检查磁盘空间
df -h /
# 清理不需要的文件后重试检查 /etc/fstab 是否包含 Swap 条目:
cat /etc/fstab | grep swap
# 应该有类似这行:
# /swapfile none swap defaults 0 0| 文件路径 | 说明 |
|---|---|
/swapfile |
Swap 文件 |
/etc/fstab |
开机自动挂载配置 |
/etc/sysctl.conf |
内核参数配置 |
/proc/swaps |
当前 Swap 状态 |
/proc/sys/vm/swappiness |
当前 swappiness 值 |
本脚本参考了以下优秀开源项目:
- spiritLHLS/addswap - OpenVZ 支持
- hawshemi/linux-optimizer - 系统优化
- stewardobeng/swap-configurator - Swap 配置
- 新增:ZRAM 压缩内存支持
- 新增:swappiness / vfs_cache_pressure 设置
- 新增:一键优化功能
- 新增:命令行参数支持
- 新增:OpenVZ fake_meminfo 支持
- 优化:自动推荐 Swap 大小
- 优化:磁盘空间预检查
- 优化:文件系统兼容性(XFS/Btrfs)
- 修复:fstab 重复条目问题
- 修复:命令执行错误处理
- 基础 Swap 添加/删除/调整功能
MIT License