docker的资源控制

docker容器的资源控制

 Docker通过Cgroup 来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Cgroup 是ControlGroups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 cpu、内存、磁盘,io等等)的机制,被LXC、docker等很多项目用于实现进程资源控制。Cgroup本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理是通过该功能来实现的。
 

cpu资源控制

cpu的使用上限

linux通过CFS(Completely Fair Scheduler 完全公平调度器),来调度各个进程对cpu的使用。CFS的调度100ms。

我们也可以自定义容器的调度周期。已经在这个周期时间之内各个容器能够使用cpu的调度时间。

--cpu-period 设置容器调度cpu的周期

--cpu-quota 设置在每个周期内容器可以使用cpu的时间

可以配合使用

CFS周期的有效范围:1ms-1s --cpu-period 1000-100 0000

容器使用cpu的配额时间必须要大于1ms --cpu-quota的值,必须是>=1000

[root@docker1 2ba14014323a7d68536ebd8414bcb6a52e1b8f196652509145b49c4a1a529e04]# cat cpu.cfs_quota_us
-1-1:如果配置是-1,那么容器在使用宿主机没有限制,随便用[root@docker1 2ba14014323a7d68536ebd8414bcb6a52e1b8f196652509145b49c4a1a529e04]# cat cpu.cfs_period_us
100000cpu.cfs_period_usCFS调度周期的长度,微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况都是100毫秒CFS调度器,100毫秒就是定义了一个周期,在这个周期内,调度任务(容器)的基本时间单位100毫秒一次调度容器请求cpu资源,然后内核把cpu资源分配给容器

cpu.cfs_quota_us

调度器请求之后,根据配额,内核分配给容器使用cpu的时间

正常打开cpu,测试使用上限

cd /opt
docker exec -it test1 bash
yum -y install vimvim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
donewq
chmod 777 cpu.sh
./cpu.shtop查看
会发现脚本把cpu占满了还能用docker top查看docker top test1docker status test1/id 可以容器的运行占用宿主机资源的情况
docker top test1/id  查看容器内宿主机和容器PID的关系

如何用配置文件方式让容器使用cpu只能用一半

docker ps -a
cd /sys/fs/cgroup cpu
ls
cd docker 
cd shfbsdjfhughvbdfffjregjerbjgf
echo 50000 > cpu.cfs_period_us

如何对容器占用cpu的时间进行限制

设置cpu的资源占用权重比:需要多个容器才能生效。

--cpu-shares 指定容器占用cpu的份额。默认权重是1024,设置的值只能是1024的倍数。

docker run -itd --name test3 --cpu-shares 512 centos:7 /bin/bashdocker run -itd --name test4 --cpu-shares 1024 centos:7 /bin/bashdocker exec -it test3 bashyum -y install epel-releaseyum -y install stress
//模拟系统负载的工具stress -c 4
top
显示查看cpu还是被占满了docker exec -it test4 bash
yum -y install epel-releaseyum -y install stressstress -c 4docker stats

--cpu-shares 是给每个使用cpu设置了相对的权重,权重高的,可以使用cpu的资源更多,但是,如果只有一个容器在运行,即使设置了权重,但是没有更高的权重的容器来占用空间,权重低的容器依然不受限

绑定容器,让他使用指定的cpu:容器只能使用指定的cpu内核

docker run -itd --name test5 --cpuset-cpus 1,3 centos:7 /bin/bash
docker exec -it test5 bash
yum -y install epel-release
yum insyall stress -y
//压力测试工具
stress -c 4
top
查看
1,3被使用

内存的使用限制

docker run -itd --name test6 -m 512m centos:7 /bin/bash

如何限制使用swap

想要限制容器使用swap,必须和限制内存一块使用。

docker run -itd --name test7 -m 512m --memory-swap=1g centos:7 /bin/bash

如果说限制了内存是512,swap是1G,那么容器上能够使用swap空间,1g-512m=512m

如果不设置: -m 512m 但是使用swap的空间是-m的两倍

如果设置 --memory-swap的值,和内存限制一样,容器就不能使用swap。

-m 512m --memory-swap=-1 ,内存受限还是512M,但是容器使用swap空间不再限制。

磁盘i/o配置

磁盘i/o分为  读 , 写 两部分

限制容器在磁盘上的读速度:

读
docker run -itd --name test8 --device-read-bps /dev/sda:1M centos:7 /bin/bash写
docker run -itd --name test8 --device-write-bps /dev/sda:1M centos:7 /bin/bash
docker exec -it test9 bash
cd /opt
ls
dd if=/dev/zero of=123.txt bs=1M count=10dd if=/dev/zero of=123.txt bs=1M count=10 oflag=direct
在使用命令获取空字符集,是从文件系统的缓存当中输入,速度是比较快的。禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入的物理设备的情况

限制容器读取的次数,限制容器写入设备的次数(了解即可)

对读取进行设置,每秒100次
docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash对写取进行设置,每秒50次
docker run -itd --name test10 --device-write-iops /dev/sda:50 centos:7 /bin/bash

清理docker占用的磁盘空间

[root@docker1 opt]# docker system prune -a
WARNING! This will remove:- all stopped containers
//删除已经停止的容器- all networks not used by at least one container
//删除所有未被使用的网桥设备- all images without at least one container associated to them
//删除所有未被使用的镜像- all build cache
//删除创建容器时的缓存,以及无用的数据卷

总结

怎么对容器使用cpu进行限制    --cpu-quota 10000  (单位毫秒)

容器占用cpu的权重                  --cpu-shares (1024倍数)

容器绑定cpu                            --cpuset-cpus

容器的宿主机内存的使用限制: -m

swap:必须和限制内存一块使用

-m 512m --memory-swap=512m

磁盘i/o: 清理docker占用的磁盘空间

扩展练习

centos1 占用cpu的时间,10000。占用cpu的权重256。占用内存1GB。cpu1

centos2 占用cpu的时间,20000. 占用权重 512。占用内存2G。cpu2

centos3 占用cpu的时间,30000. 占用权重 1024。占用内存512m。cpu3

并且都用一条命令解决

docker run -itd --name centos1 --cpu-quota 10000 --cpu-shares 256 --cpuset-cpus 1 -m 1g centos:7 /bin/bashdocker run -itd --name centos2 --cpu-quota 20000 --cpu-shares 512 --cpuset-cpus 2 -m 2g centos:7 /bin/bashdocker run -itd --name centos3 --cpu-quota 30000 --cpu-shares 1024 --cpuset-cpus 3 -m 512m centos:7 /bin/bash--name centos1    指定容器名
--cpu-quota 30000 内核分配给容器使用cpu的时间
--cpu-shares      容器占cpu的权重
--cpuset-cpus     指定容器使用哪个cpu
-m             指定容器占用内存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/258782.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自学网络安全的三个必经阶段(含学习笔记)

学习网络安全技术的方法无非三种: 第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内…

12.8 作业 C++

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

一篇文章带你快速入门 Nuxt.js 服务端渲染

1. Nuxt.js 概述 1.1 我们一起做过的SPA SPA(single page web application)单页 Web 应用,Web 不再是一张张页面,而是一个整体的应用,一个由路由系统、数据系统、页面(组件)系统等等&#xff0…

HbuilderX使用Uniapp+Vue3安装uview-plus

如果你是vue2版本想使用uniapp去配置uviewui库可以参考之前的文章 小程序的第三方ui库推荐较多的还是uview的,看起来比较美观,功能也比较完善,下面将提一下Vue3安装uview-plus库的教程 创建项目 安装 首先进入官网 uView-Plus 直接下载并导…

Spring全面详解

目录 1. Spring 概述 1.1 Spring是什么 1.2 Spring的作用 1.3 Spring IoC是什么 2. Spring 快速入门 3. Spring Bean 3.1 的实例化方式 空参构造器 3.2 的属性注入 全参构造器注入 setter方法注入 策略模式 3.3 注解管理 3.4 注解方式的属性注入 1. Spring 概述 …

Spring框架学习:Bean生命周期

目录 SpringBean的生命周期 Bean实例属性填充 三级缓存 常用的Aware接口 Spring IoC容器实例化Bean总结 SpringBean的生命周期 Spring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到…

int(1) 和 int(10) 的区别

int(1) 和 int(10) 的区别 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接…

12.8作业

1. 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是…

批量AI人工智能写作软件下载【2024最新】

在当今数字化的浪潮中,人工智能技术为各行各业带来了颠覆性的变革。其中,AI在文案创作领域的应用尤为引人瞩目,而批量AI人工智能写作更是成为文案创作者们关注的热点。本文将深入探讨批量AI人工智能写作的概念、其在不同领域的应用&#xff0…

C语言搭建项目-学生管理系统(非链表)

、 目录 搭建offer.h文件 搭建offer.c中的main函数 密码登入系统 搭建my_oferr.c中的接口函数 使用帮助菜单接口函数 增加学生信息接口函数 查询学生信息接口函数 删除学生信息接口函数 保存学生信息接口 打开文件fopen 关闭文件fclose 判断是否保存文件fwrite 退出执行文件…

联想王传东:重磅发布“AI PC先锋行动” 2024开启AI PC元年

发布 | 大力财经 “这样一场变革浪潮,需要充满想象力和创造力的人去推动,作为全栈智能领导厂商和全球PC第一品牌,我们将率先启动联想AI PC先锋行动,与AI PC生态先锋和创意先锋共同开启一起联想AI PC系列活动,不负AI&a…

LeetCode题:174. 地下城游戏

目录 一、题目要求 二、解题思路 (1)状态表示 (2)状态转移方程 (3)初始化dp表 (4)填表顺序 (5)返回值 三、代码 一、题目要求 174. 地下城游戏 恶魔们…