容器的资源限制实战

简介: vmvare 安装的虚拟机可以通过界面设定cpu、内存... 的资源限制,如下图。docer 容器也同样可以通过指定参数来达到这个目的。

一、虚拟化技术如何限制资源?

vmvare 安装的虚拟机可以通过界面设定cpu、内存... 的资源限制,如下图。docer 容器也同样可以通过指定参数来达到这个目的。其原理为何?请参见

20201110232800875.png我的环境是一台阿里云服务器

二、为容器运行限定内存

通过docker run --help

-m, --memory bytes                   Memory limit
      --memory-reservation bytes       Memory soft limit
      --memory-swap bytes              Swap limit equal to memory plus swap: '-1' to enable unlimited swap

通过docker run指定memory 限制为20MB,算上swap总共可以申请40MB。--vm-bytes记得要改一下(以我的环境来说修改为10MB),否则默认是256MB,内存如果太小一直会分配失败.

stress: dbug: [5] allocating 10485760 bytes ...
stress: dbug: [5] touching bytes in strides of 4096 bytes ...
stress: dbug: [5] freed 10485760 bytes
stress: dbug: [5] allocating 10485760 bytes ...
stress: dbug: [5] touching bytes in strides of 4096 bytes ...
stress: dbug: [5] freed 10485760 bytes
stress: dbug: [5] allocating 10485760 bytes ...
stress: dbug: [5] touching bytes in strides of 4096 bytes ...
stress: dbug: [5] freed 10485760 bytes
stress: dbug: [5] allocating 10485760 bytes ...

三、为容器运行限定cpu

 -c, --cpu-shares int                 CPU shares (relative weight)

开启三个会话:

会话一: 指定cpu权重为10

~]# docker run --cpu-shares=10 --name=test1 ninesun0318/ubuntu-stress --cpu 1 --verbose
stress: info: [1] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogcpu worker 1 [5] forked

会话二:top查看该container 的cpu信息

会话一: 指定cpu权重为5

~]# docker run --cpu-shares=5 --name=test2 ninesun0318/ubuntu-stress --cpu 1 --verbose

此时再查看top信息,刚开始两个stress 进程所占cpu分别是33% 70%,刚好是按照权重分配 2:1的关系,过一会两个进程所占cpu都是100%,

这是为什么呢?看完这张图片你应该就知道了。20201111230923870.pngmpstat -P ALL 2 100


代表 查看每颗逻辑cpu的使用状况,每2s输出一次,一共输出100次。


也就是说有两个cpu所以可以并发执行两个stress,docker 运行容器时设定的cpu权重是针对单核cpu,或者说的那个并发任务大于cpu逻辑核心数时,该参数才会生效。


不信你再docker run 一个 strss,cpu权重设定为15%。


20201111231410255.png

20201111231442106.png两颗cpu都跑慢了,但是cpu权重却生效了,这时也就发生了cpu时钟切换。

目录
相关文章
|
3月前
|
存储 消息中间件 容器
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地协同工作和交互。
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
6天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
139 6
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
2月前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
25天前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
61 0
|
2月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
115 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
1月前
|
Ubuntu Linux 应用服务中间件
Docker容器入门实战
Docker容器入门实战
|
3月前
|
XML Java 数据格式
Spring5入门到实战------5、IOC容器-Bean管理(三)
这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
Spring5入门到实战------5、IOC容器-Bean管理(三)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
下一篇
无影云桌面