首页 > 系统相关 >微服务体系-docker容器cpu内存管理

微服务体系-docker容器cpu内存管理

时间:2024-04-29 17:15:23浏览次数:33  
标签:容器 20 上限 cpu 内存 docker CPU

在微服务体系中,我们使用docker去部署微服务,在服务器资源有限的情况下。由于某个的服务(docker容器)cpu使用过高,或者内存使用过高会导致整个的服务器的崩溃。

针对这个问题,我采取了以下措施:

在docker run命令中添加 --cpus=2 --memory=4g 

  --cpus=2:设置cpu最多使用2个核心数

  --memory=4g :设置内存最多使用4g

************************

那cpu上限,内存上限是否可以随意设置呢。设置的标准是什么呢。除了对容器的使用上限有影响,还有没有其他的影响呢?

(1)设置的标准是什么?

下限:我们在设置上限之前一定要了解服务正常工作所需要的cpu,内存上限。设置的值不能小于实际运行允许的上限。

上限:服务器整体的资源有限,要考虑整个服务器可用的资源,以及其他服务部署所需要的最小资源,保证其他服务够用的基础上确定上限。

(2)是否有其他的影响?

如果在一个cpu只有20个核心数的服务器,部署20个服务,每个服务设置--cpus=5,每个服务的cpu是如何被限制的呢?在默认配置下,容器共需要20*5=100个cpu,实际只有20。所以每个容器并不会分到5个cpu。

在这种情况下,单个容器可以被分到的最大CPU上限实际上是由服务器上可用的CPU核心数和容器之间的资源争用情况共同决定的。由于每个容器都设置了相同的CPU限制(--cpus=5),Docker和宿主机的操作系统会尝试在所有运行中的容器之间公平地分配CPU时间。

理想情况下,如果所有容器都同时运行并尝试使用尽可能多的CPU资源,每个容器理论上可以获得的CPU时间将大致等于服务器总核心数(20核)除以运行中的容器数量(20个)。这意味着每个容器可能只能获得相当于1个核心的CPU时间。然而,实际情况可能因操作系统的调度策略、其他系统进程的资源占用以及容器内部的工作负载特性而有所不同。

因此,在上述例子中,单个容器可以被分到的最大CPU上限在理想情况下大约是1个核心的计算能力(即100%的CPU使用率,相对于单个核心而言)。但请注意,这是一个理论上的计算,并且实际情况可能因多种因素而有所不同。

*****************************

另外一种防止容器内服务内存占用过多策略:GC

在docker 的 dockerfile中 java jar 命令中添加对堆内存等各种内存的限制,在内存达到指定值时进行gc,减少内存溢出的发生。

 

标签:容器,20,上限,cpu,内存,docker,CPU
From: https://www.cnblogs.com/excellencesy/p/18166266

相关文章

  • docker安装其他磁盘
    1.卸载旧版本的Docker(如果有):sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\......
  • docker 卸载
    1、卸载命令yumremovedockerdocker-commondocker-selinuxdocker-engine 2、刪除对应的文件夹rm-rf/etc/dockerrm-rf/run/dockerrm-rf/var/lib/dockershimrm-rf/var/lib/docker3、查看哪些还需要卸载的yumlistinstalled|grepdocker yumrem......
  • docker-compose 安装
    1、下载最新版的docker-compose文件1)链接下载https://link.zhihu.com/?target=https%3A//github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_642)命令下载sudocurl-L"https://github.com/docker/compose/releases/download/v2.5.0/docker-comp......
  • docker 安装
    1、安装前必读在安装docker之前,先说一下配置,我这里是Centos7Linux内核:官方建议3.10以上,3.8以上貌似也可。注意:本文的命令使用的是root用户登录执行,不是root的话所有命令前面要加sudo不知道自己的内核可以用以下命令查看uname-r2、使用root权限更新yum......
  • openGauss MOT本地内存和全局内存
    MOT本地内存和全局内存SILO管理本地内存和全局内存,如所示。全局内存是所有核共享的长期内存,主要用于存储所有的表数据和索引。本地内存是短期内存,主要由会话使用,用于处理事务及将数据更改存储到事务内存中,直到提交阶段。当事务需要更改时,SILO将该事务的所有数据从全局内存复......
  • Docker安装MySQL 5.7
    1.创建数据存储目录先创建3个目录,创建MySQL容器时会挂载容器的卷。mkdirlogmkdirdatamkdirconf2.Docker仓库查看MySQL3.拉取镜像dockerpullmysql:5.74.创建MySQL配置文件[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[......
  • Docker如何搭建harbor仓库
    3.1:在部署的服务器的docker配置文件添加镜像私服地址1:编辑或创建daemon.json文件vim/etc/docker/daemon.json2:insecure-registries节点通常是不安全的,慎重设置(配置要连接harbor的ip+端口,要是80端口可以不用写),使用的是HTTPS并且有一个CA签名的证书可以在registry-mirrors节......
  • openGauss MOT本地内存和全局内存
    MOT本地内存和全局内存SILO管理本地内存和全局内存,如所示。全局内存是所有核共享的长期内存,主要用于存储所有的表数据和索引。本地内存是短期内存,主要由会话使用,用于处理事务及将数据更改存储到事务内存中,直到提交阶段。当事务需要更改时,SILO将该事务的所有数据从全局内存复......
  • openGauss MOT内存管理
    MOT内存管理规划和微调请参见MOT内存和存储规划和MOT配置。详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss MOT内存和存储规划
    MOT内存和存储规划本节描述了为满足特定应用程序需求,在评估、估计和规划内存和存储容量数量时,需要注意的事项和准则,以及影响所需内存数量的各种数据,例如计划表的数据和索引大小、维持事务管理的内存以及数据增长的速度。MOT内存规划MOT是一种内存数据库存储引擎(IMDB),其中所有表......