Docker(三)资源控制

Docker资源控制

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

1:限制CPU使用速率

在Docker中可以通过 --cpu-quota选项来限制CPU使用速率,CPU的百分比是以1000为单位

查看CPU使用率
[[email protected] apache] docker stats
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
315af9149b30        0.00%               7.406MiB / 992.7MiB   0.75%               912B / 0B           11.3MB / 0B         82
70d968aa6ef5        0.00%               5.484MiB / 992.7MiB   0.55%               3.71kB / 2.34kB     4.85MB / 0B         8

#比如:
[[email protected] apache] docker run -d --cpu-quota 10000 httpd
6883bf68559ba5101b04084cca7a00674a3c69d520d5524cc37d810926906001  //CPU的使用率限定为20%

#修改配置文件对Cgroup对CPU限制配置文件在,/sys/fs/cgroup/cpu/docker容器编号/cpu.cgs_quota_us的值来实现
[[email protected] ~]# cd /sys/fs/cgroup/cpu/docker/70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# ls
cpu.cfs_quota_us

#导入配置文件后立即生效
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# cat cpu.cfs_quota_us
-1
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# echo 10000 > cpu.cfs_quota_us
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# cat cpu.cfs_quota_us
10000

多任务按比例分享CPU

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

[[email protected] ~]# docker run -d --cpu-shares 1024 httpd
b1840fdb38d963511f779a3931d75d77747c5c18b97cd52eb8bd325529111146
[[email protected] ~]# docker run -d --cpu-shares 2048  httpd:centos
18fe91d01d360940c6c3ca8610c7dd546f439ccf5cc0821e6863b183ff41732c

[[email protected] ~] docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                       PORTS               NAMES
18fe91d01d36        httpd:centos        "/run.sh"            6 seconds ago       Up 5 seconds                 80/tcp              romantic_hodgkin
b1840fdb38d9        httpd               "httpd-foreground"   57 seconds ago      Up 56 seconds                80/tcp              youthful_bartik

限制CPU内核使用

在Docker中可以直接使用--cpuset-cpus选项来世某个程序独享CPU内核以便提高处理速度,对应的Cgroup配置文件为/sys/fs/cgroup/cpuset/docker容器编号cpuset.cpus。选项后面直接跟参数0,1,2...表示第一个内核,第二个内核,第三个内核

如果服务器有16个核心,那么CPU编号为0~15,是容器绑定1~4个内核使用

docker run -d --cpuset-cpus 0,1,2,3 容器名

对内存使用限制

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

例如:限制容器内存为512M

docker run -m 512m 512

对blkio的限制

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

例如限制容器的/dev/sda1的写入iops为1MB

docker run --device-write-bps /dev/sda1:1mb 容器名

原文地址:http://blog.51cto.com/13645280/2159030

时间: 2024-11-09 14:02:05

Docker(三)资源控制的相关文章

Docker的安装、镜像操作、容器操作及资源控制

Docker概述 Docker是在linux容器里运行应用的开源工具,是一种轻量级的虚拟机.Docker包含三大核心概念,分别是:镜像.容器和仓库.Docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.通过这种容器打包应用程序,意味着简化了重新部署.调试这些琐碎的重复工作.极大地提高了工作效率. Docker容器与传统虚拟化的比较 特性 Docker容器 虚拟机 启动速度 秒级 分钟级 计算能力消耗 几乎无 消耗50% 性能 接近原生 弱于 单机系统支

Docker数据管理、网络通信以及资源控制

Docker的安装及镜像.容器的基本操作详见博客http://blog.51cto.com/11134648/2160257下面介绍Docker数据管理.网络通信以及资源控制的方法,详细如下: Doker数据管理 容器的数据管理操作可以方便查看容器内产生的数据或者将多个容器中的数据实现共享.管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers). 一.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主

Docker基本控制命令(资源控制、数据卷及数据卷容器、镜像创建、端口映射、私有仓库)

一.资源控制 1.CPU使用率控制 限制该镜像本次建立的容器最大只能占总资源的10% docker run --cpu-quota 10000 centos 2.按比例分配 创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为33.3%和66. 7% docker run -itd --name c1 --cpu-shares 512 centos(镜像名)docker run -itd --name c2 --cpu-shares 1024 centos

docker容器资源配额控制之内存-io-数据映射

docker容器资源配额控制之内存-io-数据映射 当容器中服务或命令运行结束后,自动删除容器 作用:当容器命令运行结束后,自动删除容器.应用场景:在某些环境下,可能需要大量的新建docker虚拟机,然后仅仅运行几秒钟,然后就彻底删除.如运行单元测试等,测试弹性云计算,需要创建1万虚拟机,运行1小时,模拟双11的压力,1小时后自动删除. [[email protected] ~]# docker run -it --rm --name apeng centos sleep 5 [[email p

Docker——Cgroup资源限制

一.Cgroup (1)Docker通过 Cgroup 来控制容器使用的资源配额,包括 CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. (2)Cgroup 是 Linux 内核提供的一种可以限制.记录.隔离进程组所使用的物理资源的机制. Cgroup 子系统: 1.blkio:设置限制每个块设备的输入输出控制:2.cpu:使用调度程序为 cgroup 任务提供 cpu 的访问:3.cpuacct:产生 cgroup 任务的 cpu 资源报告:4.cpuset:如果是多核心的

Swift中文教程(三)--流程控制

原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的: 1 let individualScores = [75, 43, 103, 87, 12] 2 var teamScore = 0 3 for score in individualScores { 4 if score > 50 { 5 teamScore += 3

Linux资源控制-CPU和内存

主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进程能够占用CPU多长时间, 什么时候能够占用CPU是和系统的调度密切相关的. Linux系统中有多种调度策略, 各种调度策略有其适用的场景, 也很难说哪种调度策略是最优的. Linux的调度策略可以参见代码: include/linux/sched.h /* * Scheduling policies */ #define SCHED_NORMAL 0 #define SCHED_FIFO 1

docker 容器资源限制

docker实例资源限制主要是通过linux cgroups去实现的,cgroups可以限制.记录.隔离进程组所使用的物理资源,包括:CPU.memory.IO等.在生产上,肯定是要限制资源的.通过docker run命令加参数来实现,比如-m,--cpu-shares,具体参数请查阅docker命令.以内存为例,限制资源的话,一旦该容器使用内存到达阈值,就会报OOM:如果不限制,那么就是持续吃掉宿主机的内存,直到宿主机内存占用满为止.

Docker学习资源

Docker官方英文资源: Docker官网: http://www.docker.com Docker windows入门: https://docs.docker.com/windows/ Docker Linux 入门: https://docs.docker.com/linux/ Docker mac 入门: https://docs.docker.com/mac/ Docker 用户指引: https://docs.docker.com/engine/userguide/ Docker