docker的资源限制cpuset cpuquota memory
总结
- 目前,公司7u已经不再使用lxc,转而使用libcontainer 即native
- docker对cpuquota的支持目前是有问题的,一般大家使用docker的时候,主要是对memory,cpuset的限制,很少对 cpuquota去限制;
- cpuquota的限制的用法是这样的:
#docker run --cpuset-cpus="0-3" --cpu-quota=400000 --cpu-period=100000 -m 100M -d --net=host reg.docker.alibaba-inc.com/hippo/hippo_alios7u2_base /sbin/init,这里总是要--cpu-quota=--cpu-period=一起使用,这个意思是,--cpu-period=100000表示 cpu总共时间片有100ms,--cpu-quota=40000表示 这个容器只能使用40ms,但是 这里--cpu-quota=400000 --cpu-period=100000--cpu-quota的值 居然比 --cpu-period的值大的原因是, 这个是4核的。 - 一般的应用,我们可以使用systemd的方式,使用systemd的命令,调用systemd的dbus接口去写这个值。systemd是不会覆盖的。
1. 新生container A,使用docker参数中的cpuset cpuquota memory
[root@rs1l04637.et2sqa /home/ahao.mah]
#docker run --cpuset-cpus="0-3" --cpu-quota=400000 --cpu-period=100000 -m 100M -d --net=host reg.docker.alibaba-inc.com/hippo/hippo_alios7u2_base /sbin/init
9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578
2. container A的 -m 100M 写入了systemd的配置中,但是 cpuquota的值没有写入
[root@rs1l04637.et2sqa /home/ahao.mah]
#cat /sys/fs/cgroup/cpu/system.slice/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope/cpuset.*
0
0-3
0
0
0
[root@rs1l04637.et2sqa /home/ahao.mah]
#systemctl cat docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope
# Transient stub
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-BlockIOAccounting.conf
[Scope]
BlockIOAccounting=yes
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-CPUAccounting.conf
[Scope]
CPUAccounting=yes
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-DefaultDependencies.conf
[Unit]
DefaultDependencies=no
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-Delegate.conf
[Scope]
Delegate=yes
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-Description.conf
[Unit]
Description=docker container 9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-MemoryAccounting.conf
[Scope]
MemoryAccounting=yes
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-MemoryLimit.conf
[Scope]
MemoryLimit=104857600
# /run/systemd/system/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope.d/50-Slice.conf
[Scope]
Slice=system.slice
[root@rs1l04637.et2sqa /home/ahao.mah]
#cat /sys/fs/cgroup/cpu/system.slice/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope/cpu.cfs_quota_us
400000
3. 新生一个container B
[root@rs1l04637.et2sqa /home/ahao.mah]
#systemctl daemon-reload
[root@rs1l04637.et2sqa /home/ahao.mah]
#cat /sys/fs/cgroup/cpu/system.slice/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope/cpu.cfs_quota_us
400000
[root@rs1l04637.et2sqa /home/ahao.mah]
#docker run --cpuset-cpus="0-3" --cpu-quota=400000 --cpu-period=100000 -m 100M -d --net=host reg.docker.alibaba-inc.com/hippo/hippo_alios7u2_base /sbin/init
7cdfbed4b0719d5d584367b781a2981e6bff3f81ea0f8705e41995e15be27b76
4. 你会发现container A的cpuquota的值被reset,但是,cpuset memory的值都没有被reset ,分析一下像是 docker的--cpu-quota=400000 --cpu-period=100000 这两个参数没有将值正确的传给systemd的接口,使得持久化
5. 你可以使用 systemctl set-property testSpeed CPUQuota=10 的方式(这是systemd的方式)去修改产生的container的值,发现,经过相同的步骤是没有问题的;所以,经过分析后觉得,更像是docker没有处理好的一个bug
container A 的 cpu quota被reset了
[root@rs1l04637.et2sqa /home/ahao.mah]
#cat /sys/fs/cgroup/cpu/system.slice/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope/cpu.cfs_quota_us
-1
container A 的 cpu set没有reset
[root@rs1l04637.et2sqa /home/ahao.mah]
#cat /sys/fs/cgroup/cpu/system.slice/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope/cpuset.*
0
0-3
0
0
container A 的 memory没有reset
[root@rs1l04637.et2sqa /home/ahao.mah]
#cat /sys/fs/cgroup/memory/system.slice/docker-9ba7a3ec25e4244a706f806d80799d73d4eb48e6938b35477df544250d334578.scope/memory.limit_in_bytes
104857600
6.另外测试了,alidocker-1.12.3.1-976480.alios7.x86_64,alidocker-1.9.1.17-915487.alios7.x86_64都是一样的现象,另外,发现问题的docker都是使用native,lxc好像没有问题
docker的资源限制cpuset cpuquota memory的更多相关文章
- docker容器资源配额控制
转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...
- docker容器资源配额控制_转
转自:docker容器资源配额控制 ■ 文/ 天云软件 容器技术团队 docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cg ...
- Docker 容器资源限制
Docker 容器资源限制 默认情况下,一个容器并没有资源限制,并且该容器可以使用内核调度的所有资源.Docke提供了在启动容器时设置一些参数来控制该容器使用的内存.CPU和IO. 内存 OOME:在 ...
- Docker CPU 资源限制——CPU固定核功能测试
Docker使用Linux cgroup来实现资源的限制,对于CPU的限制有两种方法: 1.cpuset CPU Set限定容器使用某个固定的CPU核.使用默认的libcontainer引擎时,可以通 ...
- Docker的资源控制管理
Docker的资源控制管理 1.CPU控制 2.对内存使用进行限制 3.对磁盘I/O配额控制的限制 1.CPU控制: cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespa ...
- Docker CPU 资源限制——CPU分片功能测试
之前的一篇随笔——Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比. 测试步骤 1.下载CPU测试image.agileek/cpuse ...
- Docker学习资源
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口. ...
- docker仓库资源的地址修改
docker仓库资源的地址修改 1.新增或者修改/etc/docker目录下的daemon.json文件 样例文件如下 { "registry-mirrors": ["h ...
- Spring Cloud,Docker书籍资源、优秀博文等记录
Spring Cloud,Docker书籍资源.优秀博文等记录 Spring Cloud,Docker书籍资源.优秀博文等记录 一.书籍 二.博文地址 三.思维导图Or图片 3.1一张图总结 Dock ...
随机推荐
- std::string
/************************************************************************* > File Name: string.cp ...
- EL探索
- 'xcopy' 'ipconfig'。。。 不是内部或外部命令,也不是可运行的程序 或批处理文件
最近在win8下安装软件的时候,总是报 "xxx不是内部或外部命令,也不是可运行的程序 或批处理文件" 的错误 . 百思不得其解 打开cmd 或 powerShell 输入xco ...
- js实现input button从不可用变为可用
有时候明明是些很简单的东西,因为自己的一些大意,可能就在那圈子里一直兜兜转转,好久都绕不出来. 所以我也愿意把这些很简单的愚蠢写出来,与君共享~ 首先大家知道<input>有一个名叫“bu ...
- dom元素循环绑定事件的技巧
以前总觉得自己写的代码不太规范,尤其是写原生的时候.举个例子: 要为页面上所有".a"的元素绑定事件,当然了用jquery很方便:$('.a').bind("click& ...
- Codeforces Round #364 (Div. 2)C. They Are Everywhere(尺取法)
题目链接: C. They Are Everywhere time limit per test 2 seconds memory limit per test 256 megabytes input ...
- CodeForces 581D Three Logos
爆搜. #include<cstdio> #include<string.h> #include<math.h> #include<queue> #in ...
- CodeForces 590B Chip 'n Dale Rescue Rangers
这题可以o(1)推出公式,也可以二分答案+验证. #include<iostream> #include<cstring> #include<cmath> #inc ...
- ACM录 之 输入输出。
—— 简单介绍一下ACM里面的输入输出... —— 主要说C++的输入输出(其实其他的我不会...). —— C++里面有输入输出流,也就是cin和cout,用起来也算是比较方便吧... —— 但是, ...
- iOS开发——NSArray中的字典排序
手头上碰到一个项目,需要给数组中的字典中的一个字段排序,想了想,干脆再字典中增加一个字段,用来记录需要排序字段的第一个字符,用它来作为比较的对象,进行排序. - (void)viewDidLoad { ...