该脚本 protect.sh 是一款面向 Linux 系统的**主动式资源保护工具**,核心目标是通过“预留核心资源+限制非核心进程+扩容缓冲空间”的组合策略,避免系统因内存、CPU、磁盘 IO 耗尽而宕机,适配 Debian/Ubuntu(apt 包管理器)和 CentOS/RHEL(yum/dnf 包管理器)系列系统,最终通过 systemd 服务实现规则持久化,弥补 Linux 内核默认机制的局限性。
bash <(curl -s https://help.api.afmax.cn/linux/safe/protect.sh)
## 一、核心功能总览
脚本通过 8 个关键步骤实现精细化资源管控,核心围绕“保障系统核心运行+约束非核心进程”展开,最终实现开机自启的自动化保护:
1. 自动适配系统包管理器(apt/yum/dnf),无需手动切换命令;
2. 检测并扩容 SWAP 分区(确保最低 800MB),提供内存溢出缓冲;
3. 按物理内存规格动态预留核心内存,避免系统基础进程被抢占;
4. 限制非核心进程的 CPU 使用率和磁盘 IO 权重,防止资源滥用;
5. 安装依赖工具并创建 systemd 服务,确保保护规则持久生效。
## 二、详细功能拆解
### 1. 系统环境智能适配
脚本开篇自动检测系统包管理器,匹配对应操作逻辑,降低跨系统使用门槛:
– 检测到 apt-get → 判定为 Debian/Ubuntu 系,使用 apt 包管理;
– 检测到 dnf → 判定为 RHEL 8+/CentOS 8+ 系,使用 dnf 包管理;
– 检测到 yum → 判定为 RHEL 7-/CentOS 7- 系,使用 yum 包管理;
– 无上述包管理器则直接退出,避免无效执行。
### 2. 内存规格检测与动态规则匹配
通过读取 /proc/meminfo 获取系统总物理内存,按内存大小差异化设定管控规则(核心参数如下表),实现“内存越小,保护越严格”的逻辑:
| 系统总内存 | 预留核心内存 | SWAP 配置 | 非核心进程 CPU 限制 | 非核心进程 IO 限制 |
|————|————–|—————–|———————|——————-|
| ≤ 512MB | 64MB | 扩容到≥800MB | ≤10% | ≤20% |
| 512MB-1GB | 80MB | 扩容到≥800MB | ≤8% | ≤20% |
| 1GB-2GB | 100MB | 扩容到≥800MB | ≤5% | ≤15% |
| 2GB-4GB | 200MB | 扩容到≥800MB | ≤5% | ≤10% |
| 4GB-6GB | 300MB | 扩容到≥800MB | ≤4% | ≤9% |
| 6GB-8GB | 300MB | 扩容到≥800MB | ≤3% | ≤8% |
| >8GB | 300MB | 扩容到≥800MB | ≤2% | ≤5% |
### 3. 依赖工具安装
根据包管理器类型,安装资源管控必需的工具:
– Debian/Ubuntu 系:安装 cgroup-tools(cgroup 控制组工具)util-linux(系统基础工具集);
– RHEL/CentOS 系:安装 libcgroup-tools(红帽系 cgroup 工具包)util-linux。
### 4. SWAP 分区扩容(内存溢出兜底)
SWAP 作为“临时内存”,是避免内存耗尽的关键缓冲,脚本强制保障其最低容量≥800MB:
– 通过 free -k 检测当前 SWAP 总容量;
– 若不足 800MB,计算缺失容量并创建 /swap_protect 交换文件(按缺失大小生成);
– 配置文件权限(600,仅 root 可读写)、格式化并启用;
– 写入 /etc/fstab,确保系统重启后自动挂载,实现持久化缓冲。
### 5. cgroup 核心资源管控(主动限制逻辑)
通过 Linux cgroup(控制组)功能,创建名为 system_protect 的控制组,实现“核心资源预留+非核心进程约束”:
– 内存预留:通过 memory.limit_in_bytes 设定预留内存,保障系统内核、SSH 等核心进程的内存需求,避免被非核心进程抢占;
– CPU 限制:通过 cpu.shares 设定非核心进程的 CPU 权重(1024=100% 权重),例如 CPU 限制为 5% 时,权重=(100-5)×1024=97152,权重越低,可抢占的 CPU 资源越少;
– 磁盘 IO 限制:通过 blkio.weight 设定非核心进程的 IO 权重(范围 100~1000),例如 IO 限制为 10% 时,权重=1000 -(10×10)=900,降低非核心进程的 IO 优先级,避免磁盘 IO 占满导致系统卡顿。
### 6. systemd 服务持久化
创建 protect-cgroup.service 系统服务,确保保护规则开机自启、异常重启后自动恢复:
– 服务路径/etc/systemd/system/protect-cgroup.service;
– 启动逻辑(ExecStart):创建 cgroup 并应用内存、CPU、IO 限制;
– 停止逻辑(ExecStop):删除 cgroup 控制组,释放限制;
– 启用方式:通过 systemctl daemon-reload 重载配置systemctl enable --now 实现“立即启用+开机自启”。
## 三、适用场景与核心价值
### 适用场景
– 低配置服务器(如 1GB/2GB 内存的云服务器、物理机);
– 运行高资源占用进程(如数据库、爬虫、服务端程序)的系统;
– 需保障核心服务(如 SSH、系统内核、关键业务进程)稳定运行的场景。
### 核心价值
1. 自动化适配:跨系统自动匹配包管理器和依赖,无需手动配置;
2. 资源兜底:SWAP 扩容避免内存溢出,核心内存预留保障系统基础运行;
3. 精细化限制:仅约束非核心进程,不影响核心服务的性能;
4. 持久化生效:通过 systemd 服务实现开机自启,无需重复操作;
5. 可观测性:支持通过 lscgroup(查看控制组)cgget(查看控制组参数)验证配置生效状态。
## 四、补充:为什么 Linux 服务器宕机后无法自恢复?
脚本的核心意义,本质是弥补 Linux 内核默认资源机制的“被动性”——内核虽有基础保护,但无法实现“主动保障系统稳定”,这也是宕机后需手动重启的核心原因:
1. 内核保护是“被动底线级”:仅当系统濒临崩溃时(如内存耗尽),才会触发 OOM Killer(内存不足杀手),通过选择性杀死高资源占用进程保系统,但这个过程不可控,可能误杀核心服务(如数据库、SSH),导致系统虽未彻底崩溃但无法正常使用,仍需重启恢复;
2. 优先级调度需“主动配置”:内核默认所有进程优先级相近,核心服务(如内核、业务程序)与非核心服务(如临时脚本、后台进程)公平竞争资源,无自动优先权,若不主动配置(如脚本的 cgroup 规则),核心服务易被抢占资源而宕机;
3. 无法处理应用层异常:对于内存泄漏、进程死锁等应用层问题,内核无法识别和修复,只能任由其持续消耗资源,最终导致系统卡顿或宕机,而宕机后这类异常进程仍占用资源,需重启释放。
简单说,Linux 内核只负责“不轻易让系统彻底垮掉”,而“让核心服务稳定拿到足够资源、避免异常进程拖垮系统”,需要脚本这类主动配置的资源策略来实现。
## 五、使用注意事项
1. 脚本需以 root 权限执行(涉及系统资源配置、服务创建、文件写入);
2. 执行前会显示操作明细,需输入 Y 确认后才继续,避免误操作;
3. 提醒:sh脚本是高危操作,请注意来源是否正规
——–V2版本———
# 系统核心资源保护脚本 说明文档
**版本**:5.1 (防宕机+内存压缩+动态限流版)
**适用系统**:Linux (强依赖 systemd,支持 Ubuntu/Debian/CentOS/Rocky/AlmaLinux 等)
**运行权限**:root
—
## 📖 脚本简介
本脚本是一套系统级的防宕机资源调度方案。通过 **systemd** 和 **cgroup** 机制,确保在系统资源(CPU、内存、IO)极度紧张时,**系统核心进程绝对优先**,防止系统失去响应或崩溃。同时集成 **zram 内存压缩** 技术和 **高负载动态 CPU 限流** 守护进程,最大化利用硬件资源。
### 🎯 核心策略
– **正常情况**:用户进程与系统进程共享资源,用户进程享有较高配额。
– **资源紧张**:系统进程优先获得资源,动态限流守护进程自动压缩用户进程 CPU 配额。
– **极端情况**:触发 OOM Killer 时,优先牺牲用户进程保护系统;持续极高负载时,自动熔断占用资源最高的非核心用户进程。
—
## ✨ 功能特性
1. **自适应 zram 内存压缩**
– 根据物理内存大小自动分配 zram 设备(25%~60% 比例)。
– 自动选择最优压缩算法(多核用 zstd,少核用 lz4)。
– 设置 zram 为最高优先级(100),磁盘 Swap 为低优先级(10)。
2. **高负载动态 CPU 限流**
– 守护进程每 3 秒检测系统负载。
– 负载超阈值时,分级降低 `user.slice` 的 CPU 配额(80% -> 60% -> 40% -> 25%)。
– **零开销优化**:直接读写 cgroup v2/v1 伪文件系统,避免高频调用 `systemctl` 造成的 dbus 性能瓶颈。
3. **系统核心服务加固**
– `system.slice` 资源无限制,IO 权重最高 (10000)。
– 关键服务(sshd, systemd-journald, cron, dbus 等)配置自动重启及 OOM 免疫。
4. **智能紧急熔断**
– 持续 60 秒极限负载时,自动终止 Top 内存用户进程。
– 内置白名单机制,保护 `mysql`, `postgres`, `nginx`, `redis` 等常见数据库/Web服务不被误杀。
5. **全方位系统优化**
– 内核参数调优(vm.swappiness, OOM 行为, 脏页回写等)。
– 磁盘空间保护(自动调整 ext4 预留比例,配置 tmpfiles 定期清理)。
—
## 🚀 安装与运行
### 1. 下载脚本
请将脚本下载至本地服务器。**注意:文件名建议不要包含空格或括号等特殊字符。**
“`bash
# 推荐下载方式
curl -O https://help.api.afmax.cn/linux/safe/protectV2.sh
# 或者
wget https://help.api.afmax.cn/linux/safe/protectV2.sh
“`
### 2. 赋予执行权限
“`bash
chmod +x protectV2.sh
“`
### 3. 运行脚本
“`bash
./protectV2.sh
“`
*(如果文件名中不慎包含了空格或括号,如 `protectV2 (2).sh`,请务必使用双引号运行:`bash “protectV2 (2).sh”`)*
—
## 🛠️ 使用说明
脚本支持以下运行参数:
| 参数 | 说明 |
| :— | :— |
| `./protectV2.sh` | **无参数**:执行完整的资源检测、策略选择和配置安装流程。 |
| `./protectV2.sh -c` | **检查配置**:快速验证当前 zram、Swap、守护进程等状态是否正常。 |
| `./protectV2.sh -r` | **重置配置**:移除所有由本脚本创建的限制、服务及参数(需输入 `YES` 确认)。 |
| `./protectV2.sh -e [选项]` | **紧急恢复工具**:调用内置的紧急处理命令。 |
### 交互流程说明
1. 运行后,脚本会打印系统检测结果和推荐的保护策略。
2. 提示 `是否继续配置?(y/N):` —— 输入 `y` 并回车继续,直接回车则取消。
3. 配置完成后,提示 `是否立即重启系统使配置完全生效?(y/N):` —— 输入 `y` 将在 3 秒后重启系统。
### 紧急恢复工具用法 (`-e`)
“`bash
# 清理内存缓存
./protectV2.sh -e memory
# 重启用户进程 (不重启系统)
./protectV2.sh -e restart-user
# 查看当前系统状态
./protectV2.sh -e status
“`
—
## 📁 生成的文件清单
执行成功后,脚本将在系统中创建以下核心文件:
**Systemd 服务与配置:**
– `/etc/systemd/system/zram-swap.service` (zram 开机自动挂载)
– `/etc/systemd/system/dynamic-cpu-throttle.service` (动态限流守护进程)
– `/etc/systemd/system/set-oom-priority.service` (OOM 优先级设置)
– `/etc/systemd/system/system-monitor.timer` (系统监控定时器)
– `/etc/systemd/system/user.slice.d/10-user-process-limits.conf` (用户资源限制)
– `/etc/systemd/system/system.slice.d/10-system-core-protect.conf` (系统核心保护)
**脚本与工具:**
– `/usr/local/bin/dynamic-cpu-throttle.sh` (动态限流核心逻辑)
– `/usr/local/bin/set-oom-priority` (设置关键进程 OOM 分数)
– `/usr/local/bin/system-monitor.sh` (系统状态采集)
– `/usr/local/bin/emergency-recover` (紧急恢复命令行工具)
– `/usr/local/bin/check-system-protect` (配置验证工具)
**内核与系统参数:**
– `/etc/sysctl.d/99-system-protect.conf` (内核优化参数)
– `/swapfile_protect` (磁盘 Swap 文件,如有需要则创建)
—
## 🔄 卸载与还原
如果不再需要此保护策略,可以完全无损卸载:
“`bash
./protectV2.sh -r
“`
输入 `YES` 确认后,脚本将:
1. 停止并禁用所有相关 systemd 服务。
2. 删除所有生成的配置文件和脚本。
3. 关闭并删除 zram 设备及 `/swapfile_protect`。
4. 重置 `user.slice` 的 CPU 和内存限制为无限制。
5. 还原内核参数。
**建议卸载后重启系统以确保所有配置完全失效。**
—
## ⚠️ 安全告知与免责声明
> **提醒:sh脚本是高危操作,请注意来源是否正规**
> **安全告知与条款:https://files.api.afmax.cn/**
1. 本脚本涉及修改系统级内核参数、cgroup 资源配额及创建 Swap 设备,属于高危操作。
2. 在执行前,**请务必在测试环境验证**,确保与您的业务逻辑兼容。
3. 请确保已备份重要数据及系统快照。
4. 使用本脚本造成的任何直接或间接损失(包括但不限于数据丢失、系统崩溃、业务中断),脚本作者及分发平台不承担任何责任。