总结

  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. std::string

    /************************************************************************* > File Name: string.cp ...

  2. HaiHongOJ 1003 God Wang

    题目连接:http://oj.haihongblog.com/problem.php?id=1003 线段树维护区间最小值,并且求解下标 #include <stdio.h> #inclu ...

  3. springMVC源码下载地址

    https://github.com/spring-projects/spring-framework/tags可以选择需要的版本进行下载.

  4. pager-taglib插件进行普通分页

        基于Spring+ibatis+Struts+pager-taglib分页技术 pager-taglib是一款支持多种风格的分页显示.     先简单介绍一下Pager-taglib.实际上, ...

  5. away3d 汽车路线编辑器

    2012年的时候,跟朋友去到一个公司,打算用away3d做一个赛车模拟养成游戏,后来由于种种原因,立项未成,由于朋友已经转行,自己也想对自己做过的事情有一些交代,所以将我负责的部分,赛道编辑器的源码公 ...

  6. (译)Windsor入门教程---第三部分 编写第一个Installer

    原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx ...

  7. 单片机裸机下写一个自己的shell调试器

    该文章是针对于串口通讯过程中快速定义命令而写的,算是我自己的一个通用化的平台,专门用来进行串口调试用,莫要取笑 要处理串口数据首先是要对单片机的串口中断进行处理,我的方法是正确的命令必须要在命令的结尾 ...

  8. Linux-socket 模型理解

    一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用"打 开open –> 读写write/read –> 关闭close&quo ...

  9. X-005 FriendlyARM tiny4412 uboot移植之时钟初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  10. 使用idea建立gradle+SSM项目

    目录: 一.创建一个gradle项目   二 .在gradle中创建SSM项目 一 .创建一个gradle项目 第一步: 第二步:选择gradle,并选中web,然后点击Next进入下一步 第三步:此 ...