zoukankan      html  css  js  c++  java
  • docker分配CPU、内存资源

    1 CPU 资源

    参数类型说明
    --cpu-period int 是用来指定容器对CPU的使用要在多长时间内做一次重新分配
    --cpu-quota int 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器
    --cpu-rt-period int 是用来指定容器对CPU的使用要在多长时间内做一次重新分配(微秒限制CPU实时周期)
    --cpu-rt-runtime int 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器(微秒限制CPU实时运行时间)
    --cpu-shares或-c int CPU份额(相对权重)
    --cpus int CPU数量
    --cpuset-cpus string 允许执行的CPU 根据实际情况配置
    --cpuset-mems string 只应用于 NUMA 架构的 CPU 生效,关于这个选项这里不过多介绍

    1.1  通过参数–cpu-shares分配cpu使用权重

      现在运行两个测试 container,一个权重设置为 2,一个权重设置 4,启动命令如下:

    docker run -it -d --cpu-shares 2 --name 2_cpu
    docker run -it -d --cpu-shares 4 --name 4_cpu 
    

      通过压测工具如Stress进行压测,Stress使用实例:

      产生13个cpu进程4个io进程1分钟后停止运行

    stress -c 13 -i 4 --verbose --timeout 1m

      向磁盘中写入固定大小的文件,这个文件通过调用mkstemp()产生并保存在当前目录下,默认是文件产生后就被执行unlink(清除)操作,但是可以使用–hdd-bytes选项将产生的文件全部保存在当前目录下,这会将你的磁盘空间逐步耗尽

    # 生成小文件
    # stress -d 1 --hdd-noclean --hdd-bytes 13
    # 生成大文件
    # stress -d 1 --hdd-noclean --hdd-bytes 3G

      在宿主机中查看两个容器CPU占用情况

    # docker stats 2_cpu
    # docker stats 4_cpu

    1.2 通过 –cpu-period & –cpu-quota 限制容器的 CPU 使用上限

      默认的 CPU CFS「Completely Fair Scheduler」period 是 100ms。我们可以通过 –cpu-period 值限制容器的 CPU 使用。一般 –cpu-period 配合 –cpu-quota 一起使用。

      为啥把这两个参数放一起呢?因为这两个参数是相互配合的,–cpu-period和–cpu-quota的这种配置叫Ceiling Enforcement Tunable Parameters,–cpu-shares的这种配置叫Relative Shares Tunable Parameters。–cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配,而–cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。跟–cpu-shares不同的是这种配置是指定一个绝对值,而且没有弹性在里面,容器对CPU资源的使用绝对不会超过配置的值。cpu-period和cpu-quota的单位为微秒(μs)

      比如说A容器配置的–cpu-period=100000 --cpu-quota=50000,那么A容器就可以最多使用50%个CPU资源,如果配置的–cpu-quota=200000,那就可以使用200%个CPU资源。

    # docker run -it --cpu-period=100000 --cpu-quota=50000
    

    1.3 cpus设置CPU数量

      主要不可以超出核心数,不然会报错

    # docker run -d --cpus 1.21 

    1.4 cpuset-cpus允许执行的CPU

      允许执行的CPU 根据实际情况配置  

    #docker run -d --cpuset-cpus 0-1
    #docker run -d --cpuset-cpus 1,3

    2 内存资源

    2.1 通过 -m 参数限制内存大小

      设置-m值为500Mb,表示容器程序使用内存受限。如果指定 -m 内存限制时不添加 –memory-swap 选项,则表示容器中程序可以使用 500m内存和500m swap 内存。那么容器里程序可以跑到500m*2=1g后才会被oom给杀死。

    # docker run -it -d -m 500m --name limit_memory_1
    # docker stats limit_memory_1

    2.2 参数–memory-swappiness=0 表示禁用容器 swap 功能。

    # docker run -it -d -m 500m --memory-swappiness=0

    2.3 指定限制内存大小并且设置 memory-swap 值为 -1

      表示容器程序使用内存受限,而 swap 空间使用不受限制(宿主 swap 支持使用多少则容器即可使用多少。如果 –memory-swap 设置小于 –memory 则设置不生效,使用默认设置)。–memory-swap -1

    # docker run -it -d -m 500m --memory-swap -1 

    2.4  指定限制内存大小并且设置 memory-swap 值

      指定限制内存大小500Mb并且设置 memory-swap 值400Mb当压测值是900Mb时,则容器中的进程会被直接 OOM kill。

    # docker run -it -d -m 500m --memory-swap 400m 

    2.5 参数–oom-kill-disable ,加上之后则达到限制内存之后也不会被 kill

      正常情况不添加 –oom-kill-disable 容器程序内存使用超过限制后则会直接 OOM kill,加上之后则达到限制内存之后也不会被 kill。

    #docker run -it -d -m 500m --oom-kill-disable
  • 相关阅读:
    信息分析与预测复习(其它资料)
    计算斐波那契分数序列前n项之和(n是某个常数,波那契分数序列为2/1,3/2,5/3,8/5,...)
    做男人难(转)
    牢记这一刻
    二分法求方程2x34x2+3x=0在(10,10)附近的根
    求水仙花数
    iOS面试题
    【转】【翻译】在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
    【转】【翻译】实体框架中的POCO支持 第三部分 POCO的变动跟踪
    【转】EntityFramework之领域驱动设计实践:总结
  • 原文地址:https://www.cnblogs.com/wu-wu/p/14029518.html
Copyright © 2011-2022 走看看