总结

  1. 目前,公司7u已经不再使用lxc,转而使用libcontainer 即native
  2. docker对cpuquota的支持目前是有问题的,一般大家使用docker的时候,主要是对memory,cpuset的限制,很少对 cpuquota去限制;
  3. 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核的。
  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的更多相关文章

  1. docker容器资源配额控制

    转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...

  2. docker容器资源配额控制_转

    转自:docker容器资源配额控制 ■ 文/ 天云软件 容器技术团队 docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cg ...

  3. Docker 容器资源限制

    Docker 容器资源限制 默认情况下,一个容器并没有资源限制,并且该容器可以使用内核调度的所有资源.Docke提供了在启动容器时设置一些参数来控制该容器使用的内存.CPU和IO. 内存 OOME:在 ...

  4. Docker CPU 资源限制——CPU固定核功能测试

    Docker使用Linux cgroup来实现资源的限制,对于CPU的限制有两种方法: 1.cpuset CPU Set限定容器使用某个固定的CPU核.使用默认的libcontainer引擎时,可以通 ...

  5. Docker的资源控制管理

    Docker的资源控制管理 1.CPU控制 2.对内存使用进行限制 3.对磁盘I/O配额控制的限制 1.CPU控制: cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespa ...

  6. Docker CPU 资源限制——CPU分片功能测试

    之前的一篇随笔——Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比. 测试步骤 1.下载CPU测试image.agileek/cpuse ...

  7. Docker学习资源

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口. ...

  8. docker仓库资源的地址修改

    docker仓库资源的地址修改 1.新增或者修改/etc/docker目录下的daemon.json文件 样例文件如下 { "registry-mirrors": ["h ...

  9. Spring Cloud,Docker书籍资源、优秀博文等记录

    Spring Cloud,Docker书籍资源.优秀博文等记录 Spring Cloud,Docker书籍资源.优秀博文等记录 一.书籍 二.博文地址 三.思维导图Or图片 3.1一张图总结 Dock ...

随机推荐

  1. 文本属性Attributes 初步

    转载自:http://www.cnblogs.com/qingche/p/3574995.html 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...

  2. DWR 整合之Hibernate

    1.让 DWR 和 Hibernate 一起工作的检查列表 1.确保你使用的是最新的 DWR.Hibernate 转换器是新东西,所以你需要下载最新版本 2.确保你的 Hiberante 在没有 DW ...

  3. PAT (Advanced Level) 1066. Root of AVL Tree (25)

    AVL树的旋转.居然1A了.... 了解旋转方式之后,数据较小可以当做模拟写. #include<cstdio> #include<cstring> #include<c ...

  4. 'xcopy' 'ipconfig'。。。 不是内部或外部命令,也不是可运行的程序 或批处理文件

    最近在win8下安装软件的时候,总是报 "xxx不是内部或外部命令,也不是可运行的程序 或批处理文件" 的错误 . 百思不得其解  打开cmd 或 powerShell 输入xco ...

  5. 我的git常用命令

    git add . # 将所有修改过的工作文件提交暂存区 git commit -m ""

  6. 如何用PC标签在列表页中调出文章内容 phpcms

    如何用PC标签在列表页中调出文章内容 phpcms v9 moreinfo=”"参数说明 {pc:content action="lists" catid="$ ...

  7. 想要学习Linux技术,先好好的读一本Linux书籍吧

    忘记你在使用windows时的使用习惯和使用思维.学习Linux,一定要适应Linux的命令行界面,因为命令行才是Linux的真正魅力所在,而X-window或着说桌面环境也只是运行在命令行模式下的一 ...

  8. Mysql基于GTID主从复制

    Mysql5.6基于GTID全局事务的复制 什么是GTID?   GTID(Global Transaction Identifiers)是全局事务标识 当使用GTIDS时,在主上提交的每一个事务都会 ...

  9. linux undelete

    http://www.tldp.org/HOWTO/archived/Ext2fs-Undeletion-Dir-Struct/index.html http://www.giis.co.in/deb ...

  10. How difficult is it to create a JavaScript framework?

    分享来自 quora 的一篇文章 https://www.quora.com/How-difficult-is-it-to-create-a-JavaScript-framework https:// ...