# cg **Repository Path**: MM-Q/cg ## Basic Information - **Project Name**: cg - **Description**: cgroup 资源控制一键管理脚本 (CentOS 7 cgroup v1) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2025-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CG - Cgroup 资源控制一键管理脚本 一个用于 CentOS 7 系统(cgroup v1)的简化控制组管理工具,提供直观的命令行界面来管理进程资源限制。 ## 功能特性 - 🚀 一键创建和管理控制组 - 💾 内存限制管理(支持人类可读格式) - 🔄 CPU 配额控制(支持百分比输入) - 🎯 CPU 核心绑定 - 📋 控制组列表查看 - 🔍 进程资源使用情况查看 - 🛠️ Bash 自动补全支持 - 📊 系统资源状态查看 - 💾 配置持久化(自动保存和恢复控制组配置) - 🔄 系统启动自动恢复控制组 ## 安装要求 - CentOS 7 或兼容系统 - 需要root权限 - 系统已启用cgroup v1 ## 使用方法 ### 基本命令 ```bash # 显示帮助信息 ./cg.sh help # 创建控制组(使用默认资源限制) ./cg.sh create test-cg # 创建控制组(指定资源限制) ./cg.sh create test-cg 1G 80 0-1 # 修改现有控制组的资源限制 ./cg.sh set test-cg --mem 2G --cpu 60 --cores 1,3 # 只修改内存限制 ./cg.sh set test-cg --mem 2G # 只修改CPU配额 ./cg.sh set test-cg --cpu 60 # 将进程添加到控制组 ./cg.sh add test-cg 12345 # 查看控制组详细信息 ./cg.sh info test-cg # 列出所有控制组 ./cg.sh list # 查看系统资源状态 ./cg.sh sysinfo # 从控制组移除进程 ./cg.sh remove test-cg 12345 # 删除控制组 ./cg.sh delete test-cg # 恢复保存的控制组配置 ./cg.sh restore # 生成bash补全脚本 ./cg.sh completion ``` ### 安装Bash补全 ```bash # 临时启用补全 source <(./cg.sh completion) # 永久安装到bashrc echo "source <(./cg.sh completion)" >> ~/.bashrc ``` ## 资源参数说明 ### set 命令使用方式 `set` 命令使用标志参数来指定要修改的资源限制,可以单独修改一个或多个参数: ```bash # 修改所有参数 ./cg.sh set --mem --cpu --cores # 只修改内存限制 ./cg.sh set --mem # 只修改CPU配额 ./cg.sh set --cpu # 只修改CPU核心绑定 ./cg.sh set --cores # 组合修改任意两个参数 ./cg.sh set --mem --cpu ./cg.sh set --mem --cores ./cg.sh set --cpu --cores ``` ### 内存限制 支持人类可读的格式: - `512M` - 512兆字节 - `1G` - 1吉字节 - `2G` - 2吉字节 - `1024M` - 1024兆字节 ### CPU配额 支持百分比输入格式: - `50` - 50% CPU - `100` - 100% CPU(1个核心) - `200` - 200% CPU(使用2个核心) ### CPU核心绑定 支持多种格式: - `all` - 所有核心 - `0` - 核心编号0 - `1,3` - 核心编号1和3 - `0-2` - 核心编号0到2 - `0-1,3` - 核心编号0到1以及3 ## 默认配置 脚本提供以下默认资源限制: - **内存限制**: 512MB - **CPU配额**: 50%(50% CPU) - **核心绑定**: all(所有核心) ## 使用示例 ### 示例4:灵活修改控制组参数 ```bash # 创建一个初始控制组 ./cg.sh create test-cg 1G 50 all # 只增加内存限制 ./cg.sh set test-cg --mem 4G # 只降低CPU配额 ./cg.sh set test-cg --cpu 30 # 只修改CPU核心绑定 ./cg.sh set test-cg --cores 0-1 # 组合修改内存和CPU ./cg.sh set test-cg --mem 2G --cpu 70 ``` ### 示例1:限制Web服务器资源 ```bash # 创建一个限制为1GB内存和80%CPU的控制组 ./cg.sh create web-server 1G 80 # 添加Nginx进程到控制组 ./cg.sh add web-server $(pgrep nginx) # 查看控制组状态 ./cg.sh info web-server ``` ### 示例2:限制数据库服务器 ```bash # 创建一个限制为1GB内存和80%CPU的控制组 ./cg.sh create web-server 1G 80 # 添加Nginx进程到控制组 ./cg.sh add web-server $(pgrep nginx) # 查看控制组状态 ./cg.sh info web-server ``` ### 示例2:限制数据库服务器 ```bash # 创建一个限制为2GB内存和60%CPU的控制组,绑定到前两个核心 ./cg.sh create database 2G 60 0-1 # 添加MySQL进程到控制组 ./cg.sh add database $(pgrep mysqld) # 查看所有控制组状态 ./cg.sh list ``` ### 示例3:临时限制CPU密集型任务 ```bash # 创建一个限制为50%CPU的控制组 ./cg.sh create cpu-task 512M 50 # 添加任务进程 ./cg.sh add cpu-task 12345 # 任务完成后移除进程 ./cg.sh remove cpu-task 12345 # 删除控制组 ./cg.sh delete cpu-task ``` ## 输出示例 ### 控制组列表 ``` 控制组名称 CPU配额(%) 内存限制 绑定核心 进程数量 ----------------------------------------------------------------- web-server 80 1GB 0-3 3 database 60 2GB 0-1 1 cpu-task 50 512MB all 1 ``` ### 控制组详细信息 ``` ===== 控制组 web-server 信息 ===== CPU 配额: 80% (约 3.2 核心) 绑定核心: 0-3 内存限制: 1GB 已加入进程: PID: 1234 (nginx) PID: 1235 (nginx) PID: 1236 (nginx) ``` ## 故障排除 ### 权限问题 确保以root权限运行脚本: ```bash sudo ./cg.sh create test-cg ``` ### 控制组已存在 如果控制组已存在,需要先删除: ```bash ./cg.sh delete test-cg ./cg.sh create test-cg ``` ### 进程不在控制组中 如果尝试移除不在控制组中的进程,会收到错误信息。可以先用`info`命令查看控制组中的进程: ```bash ./cg.sh info test-cg ``` ## 配置持久化与系统启动自动恢复 脚本支持配置持久化功能,可以自动保存控制组配置并在系统启动时恢复。 ### 配置持久化 当您使用`create`、`set`或`delete`命令时,脚本会自动将配置保存到`/etc/cg.d/cg.conf`文件中。这样即使系统重启,您也可以轻松恢复之前的控制组配置。 ### 手动恢复配置 ```bash # 恢复所有保存的控制组配置 ./cg.sh restore ``` ### 系统启动自动恢复安装 要启用系统启动时自动恢复控制组配置,请使用提供的安装脚本: ```bash # 以root权限运行安装脚本 sudo ./install.sh ``` 安装脚本会执行以下操作: 1. 将`cg.sh`脚本复制到`/usr/local/bin/` 2. 安装恢复脚本到`/usr/local/bin/cg-restore.sh` 3. 创建并启用systemd服务`cg-restore.service` 4. 创建配置目录`/etc/cg.d/` ### 卸载自动恢复功能 如需卸载自动恢复功能,可以使用提供的卸载脚本: ```bash # 以root权限运行卸载脚本 sudo ./uninstall.sh ``` ### 查看自动恢复状态 ```bash # 查看服务状态 systemctl status cg-restore.service # 查看恢复日志 journalctl -u cg-restore.service # 或查看详细日志文件 tail -f /var/log/cg-restore.log ``` ### 配置文件格式 配置文件`/etc/cg.d/cg.conf`使用以下格式: ``` # CG 控制组配置文件 # 此文件由 cg.sh 脚本自动生成和管理 # 格式: create|set # 示例: create web-server 1G 80 0-1 create web-server 1G 80 0-1 set database 2G 60 0-1 ``` ## 技术细节 脚本通过以下cgroup v1接口管理资源: - `/sys/fs/cgroup/cpu/` - CPU配额控制 - `/sys/fs/cgroup/memory/` - 内存限制控制 - `/sys/fs/cgroup/cpuset/` - CPU核心绑定控制 ## 许可证 本脚本遵循MIT许可证。 ## 贡献 欢迎提交问题报告和功能请求。