docker学习笔记2 -- 资源限制

压测工具stress:

测试CPU

宿主机:CPU 3CORE

场景一:不做限制

  1. 宿主机启动镜像,不指定绑定到哪个核

    docker run --rm -ti -v /tmp/stress/:/tmp centos7.2 /bin/bash
    

      

  2. 进入宿主机执行stress:
    /tmp/stress -c 3
    

      

3.观察宿主机CPU使用情况:

top:
    top - 09:43:48 up 34 days, 28 min,  2 users,  load average: 2.74, 1.89, 1.02
    Tasks: 208 total,   5 running, 203 sleeping,   0 stopped,   0 zombie
    %Cpu0  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    %Cpu3  :  2.0 us,  1.0 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st

  

观察到4个core中的3个core已经被占满了

场景二:测试--cpuset-cpus

  1. 宿主机启动镜像,通过--cpuset-cpus指定绑定到CPU1

    docker run --rm -ti -v /tmp/stress/:/tmp --cpuset-cpus=1 centos7.2 /bin/bash
    

      

  2. 进入宿主机执行stress:
    ./tmp/stress -c 3
    

      

3.观察宿主机CPU使用情况:

top - 09:45:04 up 34 days, 29 min,  2 users,  load average: 2.45, 2.02, 1.14
Tasks: 207 total,   4 running, 203 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.3 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.7 us,  0.3 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu3  :  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

  

观察到只有core1被占满,其余CPU都出空闲状态

场景三:测试--cpu-shares

  1. 宿主机启动容器test1,通过--cpuset-cpus指定绑定到CPU1,--cpu-shares设置权重为1024

    docker run --rm -ti -v /tmp/stress/:/tmp --cpuset-cpus=1 --cpu-shares 1024 --name test1 centos7.2 /bin/bash
    
    /tmp/stress -c 1  # 启动后执行
    

      

  2. 宿主机启动容器test2,通过--cpuset-cpus指定绑定到CPU1,--cpu-shares设置权重为512
    docker run --rm -ti -v /tmp/stress/:/tmp --cpuset-cpus=1 --cpu-shares 512 --name test2 centos7.2 /bin/bash
    
    /tmp/stress -c 1  # 启动后执行
    

      

  3. 宿主机top查看CPU使用率
    13745 root      20   0    7256     92      0 R  66.7  0.0   0:40.38 stress
    14117 root      20   0    7256     92      0 R  33.3  0.0   0:04.01 stress
    

      

发现其中一个进程cpu占了三分之一,另一个占用三分之二

测试内存

宿主机内存16G

场景一 测试-m --memory

  1. 宿主机启动test1,通过-m绑定使用内存为100MB
    
    docker run --rm -ti -v /tmp/stress/:/tmp --memory 100m --name test1 centos7.2 /bin/bash
    docker容器使用stress测试内存
    
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 90M --vm-hang 0
    stress: info: [18] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    ^C
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 99M --vm-hang 0
    stress: info: [20] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    ^C
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 100M --vm-hang 0
    stress: info: [22] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    stress: FAIL: [22] (415) <-- worker 23 got signal 9
    stress: WARN: [22] (417) now reaping child worker processes
    stress: FAIL: [22] (451) failed run completed in 0s
    
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 110M --vm-hang 0
    stress: info: [24] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    stress: FAIL: [24] (415) <-- worker 25 got signal 9
    stress: WARN: [24] (417) now reaping child worker processes
    stress: FAIL: [24] (451) failed run completed in 0s

发现当容器内使用内存超过-m内存限制时直接被kill

场景二:测试--momory 和 --memory-swap

  1. 宿主机启动test1,通过-m绑定使用内存为100MB

    docker run --rm -ti -v /tmp/stress/:/tmp --memory 100m --memory-swap 150m --name test1 centos7.2 /bin/bash
    

      

  2. docker容器使用stress测试内存
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 90M --vm-hang 0
    stress: info: [18] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    ^C
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 99M --vm-hang 0
    stress: info: [20] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    ^C
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 100M --vm-hang 0
    stress: info: [22] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    stress: FAIL: [22] (415) <-- worker 23 got signal 9
    stress: WARN: [22] (417) now reaping child worker processes
    stress: FAIL: [22] (451) failed run completed in 0s
    
    [[email protected] /]# /tmp/stress --vm 1 --vm-bytes 110M --vm-hang 0
    stress: info: [24] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    stress: FAIL: [24] (415) <-- worker 25 got signal 9
    stress: WARN: [24] (417) now reaping child worker processes
    stress: FAIL: [24] (451) failed run completed in 0s
    

      

时间: 2024-10-21 14:42:52

docker学习笔记2 -- 资源限制的相关文章

Docker 学习笔记【1】Docker 相关概念,基本操作

计划:Docker 学习笔记[2] Docker 基础操作实操记录,Docker仓库.数据卷,网络基础学习---40 注:所有操作在root下执行 --1--概念: 1.Docker镜像: 镜像就是一个只读的模板,用于创建docker容器. Docker提供了简单的机制创建或者更新现有镜像,也可以从别处拿来现成镜像直接使用. 2.Docker容器: 可以认为是精简版的linux运行环境包含 [root权限,进程空间,用户空间,网络空间等]和应用程序 另外:镜像是只读的,容器基于镜像启动后创建一层

Docker学习笔记(一)什么是Docker

Docker学习笔记(一)什么是Docker Docker:容器技术是虚拟化技术的一种,是操作系统的虚拟化. 传统硬件虚拟化:虚拟硬件,事先分配资源,在虚拟的硬件上安装操作系统,虚拟机启动起来以后资源就会被完全占用. 操作系统虚拟化:docker是操作系统虚拟化,借助操作系统内核特性(命名空间.cgroups)实现,不需要模拟硬件行为,不需要安装操作系统. 优点: 硬件虚拟化需要安装操作系统占用空间大. 硬件虚拟化需要模拟硬件系统行为,内存和cpu消耗更大. 缺点: 容器进程崩溃,可能影响宿主机

docker学习笔记1 -- 安装和配置

技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔记:http://www.open-open.com/lib/view/open1423703640748.html 深入浅出docker:http://www.infoq.com/cn/articles/docker-core-technology-preview 安装 参考:http://www

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

Docker学习笔记(四)走进docker的世界

Docker学习笔记(四)走进docker的世界 一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面. #查看进程 sudo docker run -d cyf:sshd /usr/sbin sshd -D ps axf 可以看到在宿主机里面的5948这个sshd进程 下面进入docker容器查看 sudo docker-enter.sh 6867

个人--Docker学习笔记

Docker学习笔记 docker让应用分发,测试,部署变得前所未有的高效和轻松 docker利用率很高,一台主机上可以同时运行数千个docker容器 docker容器除了运行其中应用外,基本不消耗额外的系统资源 docker容器不需要额外的hypervisor支持,是内核级的虚拟化 docker容器几乎可以在任意平台上运行 docker的三个基本概念 镜像(image) 容器(container) 仓库(repository) 以上是docker的整个生命周期 镜像的作用是用来创建容器的.镜像

docker学习笔记(2)---Dockerfile

在docker学习笔记(1)中,我们提到了通过commit 的命令来提交新的image,下面我们来通过Dockerfile文件来生成image,而且使用Dockerfile,很方便移植. 一.Dockerfile中几个常用的指令: (1)FROM 格式: FROM <image> 或者 FROM <image>:<tag> (2)MAINTAINER 格式: MAINTAINER <name> 说明:设置生成image的作者 (3)RUN 格式: 使用she

JAVA学习笔记 -- 把资源文件打包到jar包

初学GUI,用Eclipse导出jar包,设定的最小化图标不能显示(hello.png文件放在项目的根目录下).代码如下: import javax.swing.JFrame; import java.awt.Toolkit; import java.awt.Image; import java.net.URL; public class GUITest { public static void main(String[] args) { JFrame frame = new JFrame();

Docker学习笔记——镜像、容器、仓库

Docker三个基本概念 镜像(image) 容器(container) 仓库(Repository) 镜像(image) 搜索镜像 docker search nginx 获取镜像 docker pull nginx 指定Registry地址和具体的仓库名下载镜像,没有指定Registry地址,默认从Docker Hub上下载 docker pull jwilder/nginx-proxy 查看镜像 docker images  REPOSITORY          TAG