• 【转载】 Docker-关于docker cpu的限制后,实际效果的研究


    原文地址:

    https://zhuanlan.zhihu.com/p/46275332

    ==================================================

    思考:我们使用docker时,肯定会配置cpu和内存的限定,那么问题来了,限定后的docker使用宿主机的多核cpu时是什么策略呢(cpu分工是随机分到某个几个核上,还是固定某个核)?如果我docker内的构造资源占用超过限定的cpu占用,是否会出现cpu占用溢出?

    1、配置docker容器的资源限制(宿主机为8cpu,8个核):如cpu2个、内存2G

     

    2、资源占用前cpu情况

    宿主机监控:可以看到配置生效

    Top监控-查看宿主机各核占用情况:处于空闲状态

     

    3、在docker容器中,跑消耗cpu脚本。

    #! /bin/sh
    
    # filename killcpu.sh
    
    if [ $# != 1 ] ; then
    
    echo "USAGE: $0 <CPUs>"
    
    exit 1;
    
    fi
    
    for i in `seq $1`
    
    do
    
    echo -ne "
    
    i=0;
    
    while true
    
    do
    
    i=i+1;
    
    done" | /bin/sh &
    
    pid_array[$i]=$! ;
    
    done
    
    
    
    for i in "${pid_array[@]}"; do
    
    echo 'kill ' $i ';';
    
    done
    View Code

    使用方法很简单,参数2表示消耗2颗CPU的资源,运行后,会有一堆 kill 命令,方便 kill 进程:

    [root@centos20181008-58bd6cb49-cvcph /]# sh killcpu.sh 2

    kill 44 ;

    kill 46 ;

    4、查看cpu消耗:cpu占用200%左右(2C占满)--合理情况

     

    top监控:独占某两个核

     

    5、再加一个运行脚本:死循环,运行单个可以消耗100%的cpu (如果是3c的话,将会占用300%的cpu)

    #!/bin/bash

    set i=0

    set j=0

    for((i=0;i<10;))

    do

    let "j=j+1"

    done

    6、查看cpu消耗:宿主机针对docker cpu监控正常200%左右(2C的占用),但针对8C的监控,发现压力分到4核上了,合计还是200%左右

    总结(我又验证了其他几组数据):

    容器限定 脚本构造cpu占用 宿主机cpu核占用 限定是否生效

    2核(200%) 200% 2核(各100%) 生效(监控容器205%占用)

    3核(300%) 300% 3核(各100%) 生效(监控容器303%占用)

    2核(200%) 300% 4核(26/68/64/49%,共207%) 生效(监控容器205%占用)

    3核(300%) 400% 6核(42/53/28/42/75/75%,共315%)生效(监控容器310%占用)

     

    A、通过压测可以看到,cpu限制设定可以生效(构造cpu溢出占用时,也生效);

    B、限制cpu的机制,从实验数据可以发现,如果实际cpu使用率<=限制设置,那么使用宿主机的cpu占用核数=设定的核数(优先满核占用);但如果使用cpu的使用率>限制设置,虽然限制设置还是保持生效,但占用cpu会随机分摊到不同的核上,占用合计=限定值。

    ======================================

    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    Css进阶
    Css布局
    遇到的小问题
    MySQL 8.017连接Navicat中出现的问题
    ConcurrentHashMap图文源码解析
    HashMap图文源码解析
    接口和抽象类
    dependencies 和 devDependencies
    2020.7.7第二天
    2020.7.6第一天
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/14615199.html
Copyright © 2020-2023  润新知