【云原生 | 20】Docker资源限制详解
Linux Cgroup 全称 Linux Control Group, 是 Linux 内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 CPU、内存、磁盘输入输出等)。这个项目最早是由 Google 的工程师在 2006 年发起,最早的名称为进程容器( process containers )。在 2007 年时,因为在 Linux 内核中,容器(container)这个名词太过广泛
作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!
为大家推荐一款刷题神奇 点击链接访问牛客网
各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!
牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析
目录
1. Cgroup
1.1 Cgroup 概念
Linux Cgroup 全称 Linux Control Group, 是 Linux 内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 CPU、内存、磁盘输入输出等)。这个项目最早是由 Google 的工程师在 2006 年发起,最早的名称为进程容器( process containers )。在 2007 年时,因为在 Linux 内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为 cgroup,并且被合并到 2.6.24 版的内核中去。 |
限制资源使用 优先级控制 一些审计或一些统计 挂起进程,恢复执行进程 |
1.2 Cgroup子系统
cpu 子系统,主要限制进程的 cpu 使用率
cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告
cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点
memory 子系统,可以限制进程的 memory 使用量
blkio 子系统,可以限制进程的块设备 io
devices 子系统,可以控制进程能够访问某些设备
net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制
net_prio — 这个子系统用来设计网络流量的优先级
freezer 子系统,可以挂起或者恢复 cgroups 中的进程
ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace
hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统
1.3 Cgroup示例
[root@master ~]# mount -t cgroup # 查看 Cgroup 挂载点
[root@master cpu]# cd /sys/fs/cgroup/cpu # 创建隔离组
[root@master cpu]# mkdir cpu_test
示例代码:
[root@master ~]# yum -y install gcc gcc-c++ #先安装C语言编译工具
[root@master ~]# vim axp.c #创建文件内容如下,文件必须.c结尾。C语言执行的程序。
int main(void)
{
int i = 0; #初始值为0
for(;;) i++; #判断条件为空,死循环加下去
return 0; #结束时返回0,但是死循环不肯结束的。
}
[root@master ~]# gcc axp.c #编译
[root@master ~]# ls #查看会有一个.out结尾的文件
[root@master ~]# ./a.out #运行代码
再开一个窗口
top命令查看cpu使用率
上述代码运行,CUP使用率100%,最大只能100%,因为C语言不支持多核心
[root@master cpu]# echo 20000 > /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us
[root@master cpu]# echo 23732 >> /sys/fs/cgroup/cpu/cpu_test/tasks
2. 内存资源限制
> 默认情况下,如果不对容器做任何限制,容器能够占用当前系统能给容器提供的所有资源 > Docker 限制可以从 Memory(内存)、CPU、Block I/O(磁盘I/O) 三个方面 > OOME报错:Out Of Memory Exception >> 一旦发生 OOME,任何进程都有可能被杀死,包括 docker daemon 在内 >> 为此,Docker 调整了 docker daemon 的 OOM 优先级,以免被内核关闭 |
2.1 内存资源限制参数
配额除以周期就是当前CPU资源的利用率 如果使用--oom-kill-disable选项的时候一定要加上-m选项 如果一个容器的软限制和硬限制大小一样,那它的资源会被系统优先分配(最高调度率) M代表物理内存 S代表总内存 S-M代表虚拟内存,即swap交换分区大小 unset代表不设置,为默认值(虚拟内存为2倍的M) -1代表当前物理机有多少虚拟内存(swap大小),当前容器的虚拟内存就有多少。 |
3. CPU资源限制
3.1 容器中 CPU 使用
> 默认情况下,如果不对容器做任何限制,容器能够占用当前系统中的所有 CPU 资源 > 大多数进程是采用 CFS 调度算法 > 1.13 Docker 版本后支持实时调度算法 |
3.2 容器 CPU 限制参数
3.3 资源限制实验
示例1:
> docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2 stress命令基于Ubuntu系统,是可以进行压测的命令 选项: -it 交互模式 -rm 退出即删除 -m 内存限制大小 lorel/docker-stress-ng:latest 镜像 stress 启动命令替换为stress -vm 2 以两个进程同时压测内存 |
[root@localhost ~]# docker pull lorel/docker-stress-ng:latest #下载
[root@localhost ~]# docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2 #加入物理内存进行压测,
因为值设置了物理内存-m为256m,--memory-swap没有设置,则默认是unset,虚拟内存为2倍的M,即总内存为M+2M=256+2*256 再开一个窗口 |
窗口二: |
[root@localhost ~]# docker stats #查看发现LIMIT最大内存使用为256MB
窗口一: |
发生了OOM报错,即容器内部随机杀死了一些进程 |
示例2:
> docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8 |
窗口一: |
[root@localhost ~]# docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8
窗口二: |
[root@localhost ~]# docker stats
示例3:
查看发现CPU使用率一直被限制在200%或200%以下,超过一点点很正常,刚检测到200%的时候还没来得及压测就已经超过一点了 |
> docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8 --cpuset-cpus 0亲核心绑定,CPU如果有4个,则序号为0,1,2,3。所以0代表第一个CPU。 即--cpuset-cpus 0将限制为绑定到第一个CPU上,让第一个CPU进行工作,则CPU利用率最大为100% |
窗口一:将限制为绑定到第一个CPU上 |
[root@localhost ~]# docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
窗口二: |
[root@localhost ~]# docker stats #发现CPU使用率最大为100%
窗口一:将限制为绑定到第一个CPU上且对此CPU的使用率限制为最大0.2. |
[root@localhost ~]# docker run --name stress -it --rm --cpuset-cpus 0 --cpus 0.2 lorel/docker-stress-ng:latest stress --cpu 8
窗口二: |
[root@localhost ~]# docker stats #发现CPU使用率最大为20%
👑👑👑结束语👑👑👑
为大家推荐一款刷题神奇 点击链接访问牛客网
各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!
牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析
更多推荐
所有评论(0)