wget -qO- https://raw.githubusercontent.com/jiaqp/one_swap/refs/heads/main/optimize_virtual_memory.sh | sudo bash或使用curl:
curl -fsSL https://raw.githubusercontent.com/jiaqp/one_swap/refs/heads/main/optimize_virtual_memory.sh | sudo bash- ✅ CPU测试:Sysbench单线程测试(对标 spiritLHLS/ecs 项目)
- ✅ 内存测试:Sysbench读取带宽测试(对标Lemonbench标准)
- ✅ 磁盘测试:FIO专业工具,直接模式绕过缓存,测试真实4K IOPS
- ✅ 基于 Google SRE、Red Hat Enterprise、Oracle Linux 最佳实践
- ✅ 智能虚拟化环境检测和针对性优化
- ✅ 多因子加权模型:磁盘IOPS主导(90%)+ CPU/内存微调(10%)
- ✅ 自动计算10个关键VM参数
- ✅ 自动检测并安装依赖工具
- ✅ 自动运行性能测试(约1分钟)
- ✅ 自动对比当前配置与推荐配置
- ✅ 自动应用优化(3秒倒计时)
- ✅ 自动备份原配置文件
| 参数 | 说明 | 优化依据 |
|---|---|---|
vm.swappiness |
Swap使用倾向 | 基于RAM大小和磁盘IOPS |
Swap大小 |
交换空间容量 | 三因子模型(CPU+内存+磁盘) |
vm.vfs_cache_pressure |
缓存回收策略 | 基于磁盘IOPS |
vm.dirty_ratio |
脏页上限 | 基于RAM大小和写入IOPS |
vm.dirty_background_ratio |
后台写回阈值 | dirty_ratio的1/4 |
vm.dirty_expire_centisecs |
脏页过期时间 | 基于写入IOPS |
vm.dirty_writeback_centisecs |
写回间隔 | 基于磁盘类型 |
vm.min_free_kbytes |
最小空闲内存 | 基于RAM大小和CPU核心数 |
vm.page_cluster |
Swap页面聚簇 | 基于磁盘类型 |
vm.overcommit_memory/ratio |
内存超额策略 | 基于RAM大小 |
- Web服务器(Nginx、Apache)
- 应用服务器(Java、Python、Node.js)
- 数据库服务器(MySQL、PostgreSQL、MongoDB)
- 容器主机(Docker、Kubernetes)
- 虚拟化宿主机(KVM、Xen)
- VPS/云服务器
- 极小内存环境(<1GB):自动采用激进swap策略,避免OOM
- 虚拟化环境:自动检测并针对低IOPS优化
- 低性能磁盘:自动增加swap缓冲,降低swappiness
- ✅ Ubuntu 16.04+
- ✅ Debian 8+
- ✅ CentOS/RHEL 7+
- ✅ Rocky Linux 8+
- ✅ AlmaLinux 8+
- ✅ 其他主流Linux发行版
fio- 专业存储性能测试sysbench- 综合性能基准测试bc- 数学计算sysctl- 系统参数配置
1️⃣ 检测root权限和依赖工具
↓
2️⃣ 执行深度性能测试
├─ CPU:Sysbench单线程测试(5秒)
├─ 内存:Sysbench读取带宽测试(5秒)
└─ 磁盘:FIO 4K IOPS测试(30秒)
↓
3️⃣ 商业级算法计算最优参数
├─ Swap大小(三因子加权模型)
├─ Swappiness值
└─ 8个高级VM参数
↓
4️⃣ 对比当前配置与推荐配置
└─ 显示差异,标注需要变更的参数
↓
5️⃣ 自动应用优化
├─ 备份原配置到 /etc/sysctl.conf.backup.*
├─ 实时应用参数(立即生效)
├─ 写入 /etc/sysctl.conf(永久生效)
└─ 管理Swap空间
# 下载并执行(自动应用所有优化)
wget -qO- https://raw.githubusercontent.com/jiaqp/one_swap/refs/heads/main/optimize_virtual_memory.sh | sudo bash# 下载脚本
wget https://raw.githubusercontent.com/jiaqp/one_swap/refs/heads/main/optimize_virtual_memory.sh
# 添加执行权限
chmod +x optimize_virtual_memory.sh
# 运行脚本
sudo ./optimize_virtual_memory.shwget https://raw.githubusercontent.com/jiaqp/one_swap/refs/heads/main/optimize_virtual_memory.sh
sudo bash optimize_virtual_memory.sh --no-color╔═══════════════════════════════════════════════════════════════════╗
║ 系统硬件配置信息 ║
╚═══════════════════════════════════════════════════════════════════╝
CPU:
Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz
核心数: 1, 频率: 2099 MHz
性能: 802 events/sec ⭐优化关键指标
内存:
容量: 0.45 GB
类型: DDR4-2400 ECC
读取带宽: 17999 MB/s ⭐优化关键指标
磁盘:
设备: /dev/vda (HDD)
类型: 7200 RPM SATA HDD
虚拟化: 是(宿主机SSD,虚拟盘IOPS受限)
顺序读取: 3190 MB/s
4K随机IOPS: 读100 / 写80 ⭐优化关键指标
╔═══════════════════════════════════════════════════════════════════╗
║ 商业级优化参数推荐 ║
╚═══════════════════════════════════════════════════════════════════╝
核心参数:
vm.swappiness = 45
推荐Swap大小 = 940 MB (.91 GB)
脏页管理参数:
vm.dirty_ratio = 5
vm.dirty_background_ratio = 3
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
内存管理参数:
vm.vfs_cache_pressure = 50
vm.min_free_kbytes = 16384 KB
vm.page_cluster = 3
vm.overcommit_memory = 2
vm.overcommit_ratio = 50
- ✅ 自动备份:修改前自动备份
/etc/sysctl.conf - ✅ 磁盘空间检测:空间不足时跳过备份但仍应用配置
- ✅ 参数验证:所有参数都有合理范围限制
- ✅ 分阶段应用:先应用安全参数 → 创建swap → 再应用overcommit
- ✅ 安全检查:应用前检查可用内存、磁盘空间、系统状态
- ✅ 自动回滚:检测到内存分配失败时自动恢复安全设置
- ✅ 永不使用overcommit_memory=2:避免严格限制导致无法分配内存
- ✅ 小内存保护:极小内存系统不降低min_free_kbytes
- ✅ 可回滚:保留原配置备份,可随时恢复
如果遇到 "Cannot allocate memory" 错误,请查看 紧急恢复指南
# 查找备份文件
ls -lt /etc/sysctl.conf.backup.*
# 恢复原配置
sudo cp /etc/sysctl.conf.backup.YYYYMMDD_HHMMSS /etc/sysctl.conf
sudo sysctl -psudo bash optimize_virtual_memory.sh --no-coloroptimal_swap = base_swap × cpu_factor × mem_speed_factor × disk_factor
其中:
- base_swap: 基于RAM大小(<1GB为RAM×1.4)
- cpu_factor: 0.97-1.03(基于CPU性能)
- mem_speed_factor: 0.98-1.02(基于内存带宽)
- disk_factor: 0.70-1.45(基于磁盘IOPS,主导因素)
swappiness = base_swappiness + disk_adjustment
其中:
- base_swappiness: 60→40→30→20→10→5→1(基于RAM大小)
- disk_adjustment: -20到+2(基于磁盘IOPS)
参考项目:spiritLHLS/ecs - 业界知名的VPS测评标准
- CPU: Sysbench CPU测试(素数10000,5秒)
- 内存: Sysbench Memory读取测试
- 磁盘: FIO 4K随机IOPS测试(Direct模式)
- 需要root权限:脚本需要修改系统配置
- 测试时间:完整测试约需1分钟
- 磁盘IO:测试期间会产生磁盘IO负载
- 自动应用:脚本会自动应用优化,3秒倒计时
- 重启建议:优化后建议重启系统以确保所有设置完全生效
- 🛡️ 修复关键bug:永不使用
overcommit_memory=2,避免内存分配失败 - 🔄 优化应用顺序:分阶段应用参数(安全参数 → 创建swap → overcommit)
- 🛡️ 小内存保护:极小内存系统(<512MB)不降低
min_free_kbytes - ✅ 安全检查机制:应用前检查内存、磁盘、系统状态
- 🔙 自动回滚:检测到问题时自动恢复安全设置
- 📚 紧急恢复指南:提供详细的故障恢复步骤
- 初始发布,业界标准测试+商业级算法
欢迎提交Issue和Pull Request!
MIT License
- spiritLHLS/ecs - CPU测试标准参考
- LemonBench - 内存测试标准参考
- Google SRE、Red Hat、Oracle - 优化算法参考
如有问题或建议,请提交Issue。
⭐ 如果这个项目对您有帮助,请给一个Star!⭐