原文地址:

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

使用方法很简单,参数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会随机分摊到不同的核上,占用合计=限定值。

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

【转载】 Docker-关于docker cpu的限制后,实际效果的研究的更多相关文章

  1. 【转载】大白话Docker入门(一)

    原文:https://yq.aliyun.com/articles/63035 随着docker现在越来越热门,自己也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍. ...

  2. 如何使用 Docker 来限制 CPU、内存和 IO等资源?

    如何使用 Docker 来限制 CPU.内存和 IO等资源?http://www.sohu.com/a/165506573_609513

  3. 【Docker】安装docker18.09.6后,无法启动

    ------------------------------------------------------------------------------------------------- | ...

  4. 在docker for windows建立mssql容器后,ssms连接mssql出现错误号码18456的问题

    在docker for windows建立mssql容器后,ssms连接mssql出现错误号码18456的问题 笔者提供一个可能会没考虑到的点. 请检查本机是否安装了mssql!!! 请检查本机的ms ...

  5. 【Git+Docker】Docker初期学习认识和安装配置详解

    Docker: 特性: 1.以应用为中心 2.自动化构建 3.版本控制 4.组件重用 5.镜像共享 6.工具生态系统 具体后续学习 优势: 1.文件系统隔离 2.进程隔离 3.网络隔离 4.资源隔离和 ...

  6. Docker(一):Docker入门教程

    如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...

  7. 【Docker】Docker概述

    [Docker] Docker可以说是近几年非常热门的技术之一了.不管是别人敦促我还是从自己的想法来说,都觉得Docker这玩意儿肯定是要好好学习一下的,无奈没啥时间专门播出来给Docker,一直以来 ...

  8. docker ,docker与虚拟机的区别

    什么是Docker: 1.Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 L ...

  9. docker 3 docker安装

    centos docker安装 docker支持以下centos版本: centos 7 (64-bit) centos 6.5 (64-bit)或更高的版本 前提条件 目前,centos仅发行版中的 ...

  10. docker 2 docker介绍

    docker是基于go语言实现的云开源项目 docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生 ...

随机推荐

  1. The solution of ABC144F

    都不知道什么时候做的题了 problem & blog 一开始很容易想到枚举断边然后 DP 算代价. 于是很容易想到 DP 状态定义:设 \(dp_u\) 为从 \(u\) 出发到 \(n\) ...

  2. Web之http学习笔记

    目录 HTTP url http请求 请求行 请求方法 请求头 请求正文 http响应 响应行 状态码 响应头 响应正文 Cookie 定义: 内容: 用途: 生命周期: 隐私和安全性: Sessio ...

  3. transformer原理

    Transformer注意力架构原理 输入层 embedding词嵌入向量 将文本中词汇的数字表示转变为向量表示,在这样的高维空间捕捉词汇间的关系 语义相近的词语对应的向量位置也更相近 每个词先通过词 ...

  4. Python_9 py文件导入和路径处理

    一.查缺补漏 Python中两个值交换可以直接交换如:a,b=b,a 冒泡就是从小到大排序,因为越到后越大 自动导包也适用于自己创建的模块 关于正斜杠和反斜杠https://www.cnblogs.c ...

  5. 在centos开启防火墙没启动22/tcp or 22/udp的情况下是如何ssh连上的

    偶尔间查询防火墙的22/tcp or 22/udp ,看到是no的状态,而且此时也是ssh登陆的,然后就反复尝试,关闭22端口,开启,重载,重启.甚至连上另个服务器发现还是一样的情况.在群里问大佬们终 ...

  6. PHP转Go系列 | GET 和 POST 请求的使用姿势

    大家好,我是码农先森. 说到 HTTP 请求工具想必对我们做 Web 开发的程序员都不陌生,只要涉及到网络请求都必须使用.对于我们 PHP 程序员来说,最熟悉不过的就是 CURL 扩展,只要安装的这个 ...

  7. .Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller

    .h2 { background-color: rgba(78, 110, 242, 1); color: rgba(255, 255, 255, 1); padding: 10px } 在.Net ...

  8. TOPSIS模型原理以及代码实现

    TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距.下面我们来介绍具体步骤与代码实现 目录 问题提出 第一步:数据输入 1.如何从excel ...

  9. 在Java中如何通过优化代码来节省内存

    Java 程序的一个常见问题是高内存使用率,这会导致性能问题甚至崩溃.因此,需要使用内存节省技术来优化 Java 代码并减少内存使用非常重要. 选择正确的数据类型: 使用适当大小的数据类型可以避免不必 ...

  10. jQuery -- 手稿