首页 > 其他分享 >Docker资源控制

Docker资源控制

时间:2024-06-16 22:30:31浏览次数:18  
标签:控制 容器 -- cpu CPU 内核 Docker docker 资源

  Cgroup是Control group的简写,是Linux内核提供的一种限制所使用物理资源的机制.这些资源主要包括CPU、内存.blkio。下面就这3个方面来谈一下Docker是如何使用Cgroup机制进行管理的。

1、对CPU的控制

1.1、限制CPU使用速率

        在CentOS 7,3中可以通过修改对应的Cgroup配置文件cpu.cfs_quota_us的值来实现.直接执行echo命令将设定值导入到此文件中就会立即生效。

        例如,将容器26dd7c8f4b83的CPU使用设置为20000,设置CPU的使用率限定为20%:

[root@blab ~]# echo 20000 > /sys/fs/cgroup/cpu/system.slice/docker-26dd7c8f4b832b3cfc85f0d16b420a58431748b69807be0acc7aa7aaeba2f632.scope/cpu.cfs_quota_us 

1.2、多任务按比例分享CPU

        当多个容器任务运行时,很难计算CPU的使用率,为了使容器合理使用CPU资源.可以通过---cpu-share选项设置CPU按比例共享CPU资源,这种方式还可以实现CPU使用率的动态调整。

        例如,运行3个新建容器A、B、C,占用CPU资源的比例为1∶1∶2,就可以这样执行:

  1. [root@blab ~]# docker run -tid --cpu-shares 1024 docker.io/networkboot/dhcpd

  2. 09256abb60551d688b2c9b7c8955166c76ff737977b3c574413da179c0837d2e

  3. [root@blab ~]# docker run -tid --cpu-shares 1024 docker.io/networkboot/dhcpd

  4. 60388c22bd6bf5744472d5a27e895409fdb2b56191b0f079f945e997d02d193b

  5. [root@blab ~]# docker run -tid --cpu-shares 2048 docker.io/networkboot/dhcpd

  6. 21440d850999325b745f71c4fe1eab452b60dd8e6d2b306c147fea0d500b721a

        如果又有一个容器D需要更多的CPJ资源.则可以将其---—-cpu-share的值设置为4096,那么A.B.C.D的CPU资源占用比例变为1:1∶2∶ 4。


1.3、现在CPU内核使用

        在Docker中可以使用一—cpUset--cpus选项来使某些程序独享CPU内核.以便提高其处理速度.对应的Cgroup配置文件为/sys/fs/cgroup/cpuset /systerm ,slice /docker一容器编号/cpuset ,cpus。选项后直接跟参数0.1、2…表示第1个内核.第⒉个内核.第3个内核,.与/proc/cpuinto 中的CPU编号(Processor)相同,

        如果服务器有16个核心,那么CPU编号为0~15,使新建容器绑定第1~2的内核使用,则


  1. [root@blab ~]# docker run -tid --cpuset-cpus 0,1 docker.io/networkboot/dhcpd

  2. cf54cc503e7209320361dfd381699e479cad6438bcf5746dda391e6690982a31

那么该容器内的进程只会在编号1、2的CPU上运行。

        尽量使用绑定内核的方式分配CPU资源给容器进程使用.然后再配合--cpu-share选项动态调整CPU使用资源的比例。


2、对内存使用的限制

        在Docker中可以通过docker run --m 命令来限制容器内存使用量.相应的Cgroup配置文件为/sys/is/cgroup/memory / system , slice/docker一容器编号.scope/memory . limit_in_bytes,但是需要注意,一旦容器Cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制使用内存在限制范围之内,进程就会被杀死.

例如,限制新建容器的内存上限为512MB。


  1. [root@blab ~]# docker run -tid -m 512MB docker.io/networkboot/dhcpd

  2. 6901afd22692874c64394cb7be696447162f9d4ed3994b4bc8da4224416cf840


3、对blkio的限制

        如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写磁盘数据的情况.这时可以通过--device-write-iops选项来限制每秒写io 次数来限制指定设备的写速度。相应的还有--device-read-bps 选项可以限制读取的速度.但是这种方法只能限制设备,而不能限制分区。相应的Cgroup 写配置文件为/sys/fs/cgroup/blkio/docker一容器ID/blkio , throttle , write_bps_device,

        例如.限制新建容器的/dev/sda的写入速度为1MB.


  1. [root@blab ~]# docker run -tid --device-write-bps /dev/sda:1MB docker.io/networkboot/dhcpd

  2. ab4db16cbe3798085a3ab98c1726803036a8a3df8324c577c929d56a1401ef47

标签:控制,容器,--,cpu,CPU,内核,Docker,docker,资源
From: https://blog.csdn.net/qq_44624290/article/details/139719603

相关文章

  • 嵌入式Linux中的LED驱动控制(使用多个次设备号)
    在前面的LED驱动控制中,都只使用了一个设备节点(一个次设备号)来进行操作,本例来讨论一下如何把三个基色的LED分别当成三个次设备,即产生出三个设备节点文件,但共用一个设备驱动(同一个主设备号),应用程序各自控制各自的LED。下面先给出完整的驱动程序代码,文件名仍为led.c。#include<l......
  • 【Nginx】Nginx部署前端静态资源
    打包部署我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步:前端工程打包通过nginx服务器(点击下载Nginx)发布前端工程1前端工程打包接下来我们先来对前端工程进行打包我们直接通过VSCode的NPM脚本中提供的build按钮来完整,如下图所示,直接点击即可:然后会......
  • docker阶段01 容器化概述, Docker介绍, 安装, 镜像特性和操作, 容器操作
    1.容器化概述容器:泛指可以存放其他物品的一种容纳工具,部分和完全封闭的单台服务器运行多个环境程序假如让不同的环境程序运行在不同环境中容器中怎么实现:1.通过虚拟化实现,如图,通过kvm相当于创建了多个独立的操作系统2.通过容器实现,依赖于宿主机操作系统,更省资源。......
  • Centos 7 Docker 安装
    1、设置主机网络,关闭防火墙,selinux等[root@localhost~]#cat/etc/sysconfig/network-scripts/ifcfg-ens32TYPE=EthernetBOOTPROTO=staticNAME=ens32DEVICE=ens32ONBOOT=yesIPADDR=192.168.xxx.10NETMASK=255.255.255.0GATEWAY=192.168.xxx.2DNS1=192.168.xxx.2DNS......
  • 在window 使用 docker 安装redis 踩坑记
    1.安装REDIS在安装的时候,使用dockerpullredis就可以了。但是实际上发现镜像居然拉不下来。修改了一下docker镜像。配置如下:"registry-mirrors":["https://dockerproxy.com","https://docker.m.daocloud.io","https://docker.mirrors.ustc.edu.cn&quo......
  • Docker部署SpringBoot项目
    准备服务器安装Docker下载dockerWindows版本并登录根据项目需要在项目根目录下创建Dockerfile文件#使用官方的OpenJDK8作为基础镜像FROMopenjdk:8-jdk-alpine#维护者信息LABELmaintainer="name"#添加一个应用程序的工作目录WORKDIR/app#将JAR文件添加到......
  • 16个免费学习Python的网站和教程(2024年最新资源)
    16个免费学习Python的网站和教程(2024年最新资源)博主猫头虎的技术世界......
  • 【4】版本控制系统SVN
    版本控制系统SVN【一】SVN的基本概念SVN是subverion的简称,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发一个项目,实现共享资源,实现最终集成式的管理。SVN的作用:在项目组当中对需求规格说明书,测试用例,产品说明书,代码或者与项目......
  • Google Earth Engine(GEE)——在控制台上答应出一个button按钮
    函数:ui.Button(label, onClick, disabled, style)Aclickablebuttonwithatextlabel.Arguments:label(String,optional):Thebutton'slabel.Defaultstoanemptystring.onClick(Function,optional):Acallbackfiredwhenthebuttonisclicked.The......
  • 用idea导入maven在打包之后在web.xml文件找不到src/main/resources文件夹下的资源(已解
    一、产生原因这其实是因为在导入ssm项目时候src/main/resources下的配置文件打包丢失造成的二、解决办法1、在确定maven包都导入情况下,只有资源文件找不到(ps:不能修改绝对路径,否则项目跑不起来) 2、此时的resources文件夹是普通文件夹3、点击项目配置 4、因为之前他只是......