以下是 cgroup-tools 包中相关命令的详解及典型应用场景举例,基于 Linux 资源管理需求整理:


📌 ​​核心命令详解与示例​

​1. cgcreate - 创建新 cgroup​

​功能​​:在指定子系统(如 CPU、内存)下创建 cgroup 目录结构。

​语法​​:cgcreate -g <子系统>:<路径>

​示例​​:

cgcreate -g cpu,memory:/testgroup  # 创建名为 testgroup 的 cgroup,控制 CPU 和内存

​应用场景​​:为特定应用(如数据库服务)创建独立资源组,限制其 CPU 和内存使用,避免影响其他进程。


​2. cgset - 配置 cgroup 参数​

​功能​​:动态修改 cgroup 的资源限制值(无需重启)。

​语法​​:cgset -r <参数>=<值> <cgroup>

​示例​​:

cgset -r memory.limit_in_bytes=1G /testgroup  # 限制内存上限为 1GB
cgset -r cpu.cfs_quota_us=50000 /testgroup    # 限制 CPU 使用率为 50%(周期 100ms)

​应用场景​​:应对突发流量时,临时调整 Web 服务的资源配额,防止进程 OOM 崩溃。


​3. cgexec - 在 cgroup 中运行进程​

​功能​​:直接启动进程并绑定到指定 cgroup。

​语法​​:cgexec -g <子系统>:<cgroup> <命令>

​示例​​:

cgexec -g cpu,memory:/testgroup ./data_processor.sh  # 在 testgroup 中运行数据处理脚本

​应用场景​​:运行高 CPU 消耗的批处理任务时,避免影响实时服务(如 Nginx)的响应延迟。


​4. cgclassify - 将进程移入 cgroup​

​功能​​:将 ​​已运行​​ 的进程加入现有 cgroup。

​语法​​:cgclassify -g <子系统>:<cgroup> <PID>

​示例​​:

cgclassify -g cpu,memory:/testgroup 1234  # 将 PID 1234 的进程移入 testgroup

​应用场景​​:运维监控发现某 Java 进程内存泄漏,将其移入限制组避免系统资源耗尽。


​5. cgget - 查看 cgroup 配置​

​功能​​:查询 cgroup 的当前资源限制值。

​语法​​:cgget -g <子系统>:<cgroup>

​示例​​:

cgget -g memory:/testgroup  # 显示 testgroup 的内存限制

​应用场景​​:审计资源分配策略,确认是否按预期限制了容器化应用的内存。


​6. cgdelete - 删除 cgroup​

​功能​​:移除不再需要的 cgroup。

​语法​​:cgdelete <子系统>:<cgroup>

​示例​​:

cgdelete cpu,memory:/testgroup  # 删除 testgroup 及其配置

​应用场景​​:清理测试环境残留的 cgroup,释放内核资源。


⚙️ ​​辅助命令说明​

命令 功能 典型使用场景
cgsnapshot 备份 cgroup 配置 批量迁移资源策略到新服务器
cgclear 清除所有 cgroup 快速重置实验环境
cgconfigparser 解析配置文件加载 cgroup 开机自动加载预定义资源规则(如 /etc/cgconfig.conf
cgrulesengd 守护进程自动分类进程 根据 UID 或进程名自动分配 cgroup(需配置 /etc/cgrules.conf

💻 ​​综合案例:多租户服务器资源隔离​

​问题​​:一台服务器同时运行 Web 服务(Nginx)和数据分析脚本,需确保 Web 服务高优先级。

​解决方案​​:

# 1. 创建 cgroup
cgcreate -g cpu,memory:/web_group
cgcreate -g cpu,memory:/data_group

# 2. 设置资源限制
cgset -r cpu.shares=512 /web_group  # Web 组 CPU 权重更高
cgset -r memory.limit_in_bytes=2G /data_group  # 数据组内存上限 2GB

# 3. 启动进程并绑定
cgexec -g cpu,memory:/web_group systemctl start nginx
cgexec -g cpu,memory:/data_group ./analyze_data.py

# 4. 监控资源
cgget -g cpu,memory:/web_group  # 确认 Web 组未超限

​效果​​:Nginx 在 CPU 竞争时获得更多资源,数据分析脚本内存溢出时被 cgroup 终止,不影响 Web 服务。


💡 ​​提示​​:

  • 永久生效需配置 /etc/cgconfig.confcgconfigparser 解析)和 /etc/cgrules.confcgrulesengd 守护进程管理)。

  • 结合 tophtop 监控实际资源使用,动态调整 cgroup 参数。

posted on 2025-07-31 09:53  LeeHang  阅读(235)  评论(0)    收藏  举报