linux control groups(cgroups)
文章目录
linux control groups(cgroups)
cgroup配置目录
|
|
|
|
cgroups 实现了对资源的配额和度量
目录 | 用处 |
---|---|
blkio | 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及 USB 等等。 |
CPU | 这个子系统使用调度程序为 cgroup 任务提供 CPU 的访问。 |
cpuacct | 产生 cgroup 任务的 CPU 资源报告 |
cpuset | 如果是多核心的 CPU,这个子系统会为 cgroup 任务分配单独的 CPU 和内存。 |
devices | 允许或拒绝 cgroup 任务对设备的访问。 |
这个子系统设定 cgroup 中任务使用的内存限制,并自动生成内存资源使用报告。 【设置太小,小心程序oom】 |
cpu子系统
名字 | 描述 |
---|---|
cpu.shares | 可以让出获得cpu使用时间的相对值 |
cpu.cfs_period_us | cfs_period_us用来配置 时间周期长度,单位为us(微秒) |
cpu.stat | Cgrou 内的进程使用的CPU时间统计 |
nr_periods | 经过cpu.cfs_period_us的时间周期数量 |
nr_throttled | 在经过周期内,有多少次因为进程在指定的时间周期内用光了配额时间而受到限制 |
throttled_time | cgroup中的进程被限制使用CPU的总用时,单位是ns |
使用cpu子系统示例
测试代码
|
|
结果演示
cpuacct 子系统
用于统计Cgroup及其子 Cgroup下进程的CPU使用情况
- cpuacct.usage
- 包含该Cgroup及其子Cgroup下进程使用CPU的时间,单位 是 ns(纳秒)
- cpuacct.stat
- 包含该Cgroup及其子Cgroup下进程使用的CPU时间,以及用户态和内核态的时间
memory 子系统
目录 | 用处 |
---|---|
memory.usage_in_bytes | cgroup下进程使用的内存,包含cgroup及其子cgroup下的进程使用的内存 |
memory.max_usage_in_bytes | cgroup下进程使用内存的最大值,包含子cgroup的内存使用量 |
memory.limit_in_bytes | 设置进程最多能使用的内存,-1 表示不作限制 |
memory.soft_limit_in_bytes | 不会阻止进程使用超过限额的内存,只是在系统内存足够时候会优先回收超过限额的内存,使之向限定值靠拢 |
memory.oom_control | 设置是否在Cgroup中使用 OOM (out of memory ) killer ,默认使用。当属于该cgroup的进程使用的内存超过最大的限定时候,会立刻被killer处理 |
soft_limit_in_bytes 的使用情况:
内存不够也可能将部分内存交换到硬盘上去,page cache本身也占用内存,这种情况,
memory子系统使用示例
• Memory 子系统练习
• 在 cgroup memory 子系统目录中创建目录结构
cd /sys/fs/cgroup/memory
mkdir memorydemo
cd memorydemo
• 运行 malloc(在linux机器make build)
• 查看内存使用情况
watch 'ps -aux|grep $程序名字|grep -v grep
• 通过 cgroup 限制 memory
• 把进程添加到cgroup进程配置组
echo ps -ef|grep $程序名字 |grep -v grep|awk '{print $2}' > cgroup.procs
• 设置memory.limit_in_bytes
echo 104960000 > memory.limit_in_bytes
• 等待进程被 oom kill
文章作者 lyr
上次更新 2022-03-18