docker 利用 Linux 内核的 cgroup 功能,实现对容器的资源使用限制,通过将容器内的进程 PID号 加入同一个以容器ID为开头命名的cgroup控制组内,实现容器进程的资源限制
1. 验证当前主机已挂载cgroup
2. 创建控制组 demo
3. 生成一个CPU占用100%的进程
该进程会进入死循环,将当前系统cpu使用率堆到100%
4.检查当前cpu使用率,及该进程占用cpu情况
pidstat 工具可通过sysstat包安装,此处 -p 23877 表示查询PID为23877的进程, 3 表示每3秒显示一次
5. 将该进程加入demo控制组,并限制cpu使用率为20%
cpu.cfs_period_us 值为 100000ns 表示 100ms 内该控制组下进程可以使用的CPU时间
cpu.cfs_quota_us 值为 -1 表示当前demo控制组下进程组在100ms内可以使用的cpu时间无限制
将 cpu.cfs_quota_us 修改为 20000,并将 23877 这个 PID加入到demo控制组
cpu.cfs_quota_us 配置为 20000ns (20ms) 表示 100ms 内该控制组下进程可以使用20ms的cpu时间,相当于限制该进程组下的进程可以使用20%的CPU资源
6.Docker对容器的资源限制
Docker会在每个可使用cgroup限制的资源内创建一个docker目录(相当于创建一个Docker控制组),并在Docker控制组内为每个容器创建一个独立的控制组,容器启动后,将容器的进程ID 加入到tasks路径下,实现对容器的资源限制,如下截图展示了demo容器内内存限制为512M的情况