docker 利用 Linux 内核的 cgroup 功能,实现对容器的资源使用限制,通过将容器内的进程 PID号 加入同一个以容器ID为开头命名的cgroup控制组内,实现容器进程的资源限制
mount -t cgroup
cd /sys/fs/cgroup/cpu
mkdir demo
ls -l demo #正常创建后demo控制组目录下会生成如cpu.cfs.quota_us 等文件
while true;do : ; done &
该进程会进入死循环,将当前系统cpu使用率堆到100%
top #top 工具一般为系统自带,用于显示当前系统负载情况
pidstat -p 15028 3 # pidstat 工具可通过sysstat包安装,此处 -p 15028 表示查询PID为15028的进程, 3 表示每3秒显示一次
通过 pidstat 工具确认是该进程导致系统CPU升高,该进程CPU占用为100%
cat cpu.cfs_quota_us
cat cpu.cfs_period_us
cpu.cfs_period_us 值为 100000ns 表示 100ms 内该控制组下进程可以使用的CPU时间
cpu.cfs_quota_us 值为 -1 表示当前demo控制组下进程组在100ms内可以使用的cpu时间无限制
b. 将 cpu.cfs_quota_us 修改为 20000,并将 15028 这个 PID加入到demo控制组
echo 20000 > cpu.cfs_quota_us
echo 15028 > tasks
cpu.cfs_quota_us 配置为 20000ns (20ms) 表示 100ms 内该控制组下进程可以使用20ms的cpu时间,相当于限制该进程组下的进程可以使用20%的CPU资源
c. 验证进程CPU占用是否降低到20%
top
Docker会在每个可使用cgroup限制的资源内创建一个docker目录(相当于创建一个Docker控制组),并在Docker控制组内为每个容器创建一个独立的控制组,容器启动后,将容器的进程ID 加入到tasks路径下,实现对容器的资源限制,如下截图展示了demo容器内内存限制为512M的情况
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。