5 节课深入学习Linux Cgroups

Linux Cgroups(Control Groups) 的系统化学习内容,分为 5 节课 ,从基础概念到实战调优,逐步深入,最终能够 理解 Cgroups 原理、掌握实际使用、分析性能问题并在容器环境中排错


Linux Cgroups 学习

目标

  • 理解 Linux Cgroups 的设计目的和工作机制
  • 掌握 Cgroups v1 和 v2 的使用方法及差异
  • 能够限制、隔离和监控进程的 CPU、内存、IO、网络等资源
  • 掌握 Cgroups 与容器技术(Docker、Kubernetes)的关系
  • 学会使用 Cgroups 定位性能问题、排查资源争用

课程安排

课时 主题 目标 主要内容 实验/练习
第 1 节:Cgroups 基础与核心概念 了解 Cgroups 的基本理论和 Linux 系统结构 认识 Cgroups 的作用和场景 - Cgroups 的历史:从 v1 到 v2- 为什么需要 Cgroups(进程资源隔离问题)- Cgroups 与进程树(task 和 cgroup 关系)- Cgroups 关键概念:hierarchy、subsystem、controller- 系统目录结构 /sys/fs/cgroup/ - 查看当前系统的 Cgroups 层级结构- 使用 cat /proc/self/cgroup 检查当前进程所属的 cgroup
第 2 节:Cgroups v1 vs v2 深入理解 掌握 v1 和 v2 设计区别与实际配置 能够在系统上正确区分并操作两种模式 - v1 的多 hierarchy 设计及缺陷- v2 的 unified hierarchy 模式- Cgroups v2 新特性(delegation、controller统一)- 如何在 Linux 启用 Cgroups v2:kernel cmdline 设置 systemd.unified_cgroup_hierarchy=1- cgroup.controllerscgroup.subtree_control - 在虚拟机切换 v1/v2 模式- 使用 v2 创建简单的资源限制(CPU/Memory)
第 3 节:CPU、Memory、IO 资源管理 掌握常见 controller 的配置 能够限制和隔离应用资源 - CPU Controller:cpu.sharescpu.max、调度策略- Memory Controller:memory.maxmemory.swap.max、OOM 行为- IO Controller:io.maxblkio.throttle- 网络和 PID 限制- 配置文件及动态修改 - 限制某进程只使用 1 核 CPU 50% 时间片- 限制某进程最大内存 512MB- 观察内存 OOM 日志
第 4 节:Cgroups 与容器(Docker/K8s) 理解容器与 Cgroups 的关系 学会查看容器资源配置 - 容器技术三大核心:Namespace + Cgroups + RootFS- Docker 如何利用 Cgroups 限制容器资源- Kubernetes Pod QoS 及资源限制- 使用 docker inspect / kubectl describe 解析 cgroup 配置- 常见资源异常问题分析 - 在 Docker 容器设置 --cpus=1--memory=512m- Kubernetes Pod 资源 request/limit 演示
第 5 节:性能监控与问题排查 掌握如何基于 Cgroups 做性能监控和问题定位 能够排查资源瓶颈 - 使用 systemd-cgtopcgroupstat 监控- 分析 CPU 饥饿与内存 OOM Root Cause- 常见问题案例: - 某进程 CPU 100% 导致其他 Pod 变慢 - 内存泄露导致 OOMKill - IO 阻塞导致吞吐下降- 自动化脚本与告警 - 模拟内存泄露进程,观察 memory.current 与 OOM 日志- 使用 perf 结合 cgroup 采样性能热点

扩展学习

方向 相关工具
性能调优 perf, bcc, eBPF
容器管理 Kubernetes, containerd
自动化监控 Prometheus, cAdvisor
内核源码 kernel/sched, kernel/cgroup

最终效果

学完本课程后,能够:

  1. 理解 Cgroups 原理与设计思想
  2. 实操 限制 CPU/Memory/IO 资源
  3. 分析 Kubernetes/Docker 容器资源问题
  4. 优化 系统和容器的性能
  5. 调试 复杂场景,如 OOM、CPU 饥饿、IO 瓶颈
相关推荐
christine-rr3 小时前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神5554 小时前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆4 小时前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs
乌萨奇也要立志学C++4 小时前
【Linux】进程概念(二):进程查看与 fork 初探
linux·运维·服务器
獭.獭.6 小时前
Linux -- 信号【上】
linux·运维·服务器
hashiqimiya6 小时前
centos配置环境变量jdk
linux·运维·centos
hashiqimiya6 小时前
权限更改centos中系统文件无法创建文件夹,使用命令让普通用户具备操作文件夹
linux
逆小舟10 小时前
【Linux】人事档案——用户及组管理
linux·c++
青草地溪水旁10 小时前
pthread_mutex_lock函数深度解析
linux·多线程·pthread