Docker资源控制管理

目录

一.CPU 资源控制

1.定义

2.cgroups四大功能

(1)资源限制:可以对任务使用的资源总额进行限制

(2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级

(3)资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等

(4)任务控制:cgroup可以对任务执行挂起、恢复等操作

二.对CPU使用率限制

1.使用stress工具测试CPU 和内存使用情况

2.设置CPU资源占用比(设置多个容器时生效)

3.限制CPU使用周期速率

4.限制CPU内核使用

二.对内存限额

三.对磁盘IO配额控制(blkio)的限制

四.扩展

1.清除日志

2.当日志占满之后如何处理


一.CPU 资源控制

1.定义

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups(Control groups)实现了对资源的配额和度量。

2.cgroups四大功能

(1)资源限制:可以对任务使用的资源总额进行限制
(2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
(3)资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
(4)任务控制:cgroup可以对任务执行挂起、恢复等操作

二.对CPU使用率限制

1.使用stress工具测试CPU 和内存使用情况

mkdir /opt/stress
vim /opt/stress/Dockerfile——————————————————————————————————————————————————————————————————————————————FROM centos:7
RUN yum -y install wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo		#epel源,可以使用扩展软件包(stress)
RUN yum -y install stress		#可以指定产生线程,使用循环语句,测试用'
——————————————————————————————————————————————————————————————————————————————
cd /opt/stress/
systemctl restart docker.service		#建议重启docker,不然下面的操作可能会失败,卡在wget
docker build -t centos:stress .		#生成镜像
...
...
Successfully built 7e69cc4d1b07
Successfully tagged crntos:stress
docker images 
#以下可以使用该镜像为基础产生的容器进行测试:'

2.设置CPU资源占用比(设置多个容器时生效)

docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10   
#-c 10表示产生10个子线程,测试用
docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10#查看容器的资源使用状态(动态更新)
docker stats资源是用cadvisor收集的

3.限制CPU使用周期速率

cat /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us
#-1,表示不做控制#例如:容器进程需要每Ⅰ秒使用单个cPU的 0.2秒时间,可以将 --cpu-period 设置为1000000(即1秒),cpu-quota 设置为200000 0.2秒)。
#当然,在多核情况下,如果允许容器进程完全占用两个CPU,则可以将cpu-period 设置为 100000(即 0.1秒),cpu-quota 设置为200000 (0.2秒)。
docker run -itd --name test01 --cpu-period 100000 --cpu-quota 200000 centos:stress #也可以直接去修改文件vim /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us#法一:进入指定容器查看
docker exec -it test01 bash
cd /sys/fs/cgroup/cpu
cat cpu.cfs_period_us 
cat cpu.cfs_quota_us#法二:docker inspect 容器ID
docker inspect 6ccc4ddcb6ad

4.限制CPU内核使用

docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress
#执行以上命令需要宿主机为双核,表示创建的容器只能用0、1两个内核。最终生成的 cgroup的 CPU内核配置如下cat /sys/fs/cgroup/cpuset/docker/[容器ID]/cpuset.cpusdocker exec -it cpu1 /bin/bash -c "stress -c 10"

二.对内存限额

  • 与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap

  • -m 或 --memory:设置内存的使用限额

  • –memory-swap:设置内存+swap 的使用限额

docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
#--vm 1:启动1个内存工作线程
#--vm-bytes 280M:每个线程分配280M内存#默认情况下,容器可以使用主机上的所有空闲内存。
#与 CPU 的cgroups 配置类似,Docker会自动为容器在目录/sys/fs/cgroup/memory/docker/<容器完整的 ID>/memory.limit_in_bytesdocker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
#如果让工作线程分配的内存超过300M,分配的内存超过了限额,stress线程会报错,容器退出'注意!一旦容器Cgroup使用的内存超过了限制的容量,Linux内核就会尝试收回这些内存'
'如果仍旧无法控制内存使用在这个设置的范围之内,就会杀死该进程!

三.对磁盘IO配额控制(blkio)的限制

--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test9 --device-read-bps /dev/sda:1M  centos:7 /bin/bash--device-write-bps : 限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash--device-read-iops :限制读某个设备的iops(次数)--device-write-iops :限制写入某个设备的iops(次数)#创建容器,并限制写速度
docker run -it --name test10 --device-write-bps /dev/sda:1MB centos:7 /bin/bash#通过dd来验证写速度
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct				#添加oflag参数以规避掉文件系统cache
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s#清理docker占用的磁盘空间
docker system prune -a			#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

四.扩展

故障:由于docker容器故障导致大量日志集满,会造成磁盘空间满

解决方案

1.清除日志

#!/bin/bash
logs=$ (find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done

2.当日志占满之后如何处理

###设置docker日志文件数量及每个日志大小vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver": "json-file",   #我的一日志格式
"log-opts": { "max-size" : "500m", "max-file" : "3"}   日志的参数最大500M   我最大容器中有三个日志文件 每个日志文件大小是500M
}systemctl daemon-reload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm-ieda-phpstorm超级好用插件,一键解释代码

功能&#xff1a;解释你看不懂的代码 当你在写python和Java代码的时候&#xff0c;总有你看不懂的代码&#xff0c;怎么办&#xff1f;csdn搜&#xff1f;那不麻烦&#xff0c;直接插件解决。 来安装&#xff1a;文件-设置 点击插件-Marketplace-搜索通义灵码 安装完成后&…

GitHub介绍,GitHub如何订阅充值?

一、GitHub介绍 GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持git 作为唯一的版本库格式进行托管&#xff0c;故名Github。 GitHub于2008年4月10日正式上线&#xff0c;除了git代码仓库托管及基本的Web管理界面以外&#xff0c;还提供了订阅、讨论组、…

Windows系统引导重建,Windows引导损坏修复

Windows系统引导重建 引导是一个非常**「脆弱」的东西&#xff0c;对系统、分区**的操作都有可能导致其出现问题。 比如分区操作不当、不小心格式化某个分区、误删看不懂的文件&#xff0c;这与你用什么软件操作无关。 而引导只要出现问题&#xff0c;你的电脑就无法进入系统…

go语言通过TCP协议实现聊天室样例

目录 1、服务端&#xff1a; 2、客户端&#xff1a; 3、实现效果 1、服务端&#xff1a; package mainimport ("fmt""net""sync" )type ChatServer struct {clients map[string]net.ConnclientsMux sync.Mutex }func NewChatServer() *Ch…

功能测试_分类_用例_方法

总结 测试分类 按阶段分类 是否查看源代码分类 是否运行分类 是否自动化 其他分类 软件质量模型 开发模型-瀑布模型 测试过程模型 v w 测试用例八大要素 用例编号 用例标题 …

【delphi 】常用资源网站

在Delphi的日常开发中&#xff0c;经常会用到第三方资源&#xff0c;本文收集的是开源的资源&#xff0c;建议收藏&#xff0c;以备不时之需&#xff01; 目录 一、通用资源 1. JCL 2. JVCL 3. Alcinoe (mirror at GH) 4. Fundamentals Code Library 5. Spring4D 6. The…

装饰器模式【结构型模式C++】

1.概述 装饰器模式是一种结构型设计模式&#xff0c; 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 2.结构 抽象构件&#xff08;Component&#xff09;角色&#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。具体构件&#xff08;Concre…

Cmake Learn

目录 1 常用命令 &#xff08;1&#xff09;configure_file &#xff08;2&#xff09;.cmake文件 &#xff08;3&#xff09; install &#xff08;4&#xff09;include_directories &#xff08;5&#xff09; add_subdirectory &#xff08;6&#xff09; find_libr…

FPGA秋招-笔记整理(3)无符号数、有符号数

参考&#xff1a;Verilog学习笔记——有符号数的乘法和加法 一、无符号数、有符号数 将输入输出全部定义为有符号数 &#xff08;1&#xff09;无符号数的读取按照原码进行&#xff0c;有符号数的读取应该按照补码读取&#xff0c;计算规则为去掉符号位后取反、加1在计算数值…

中国人工智能奠基人张钹院士:走进“无人区” 探索人工智能之路

4月23日&#xff0c;中国人工智能奠基人、清华大学计算机系教授、中国科学院院士张钹在“人文清华”讲坛作专题分享。在2小时的直播中&#xff0c;张钹以《走进“无人区” 探索人工智能之路》为主题&#xff0c;回顾人工智能的发展历程&#xff0c;为大家解读ChatGPT的意义&…

掺硼金刚石电极(BDD电极)电化学特性优异 全球市场将持续扩大

掺硼金刚石电极&#xff08;BDD电极&#xff09;电化学特性优异 全球市场将持续扩大 掺硼金刚石电极&#xff0c;简称BDD电极&#xff0c;是以掺硼金刚石&#xff08;BDD&#xff09;为材料制造而成的电极&#xff0c;即以金属或非金属材料为衬底&#xff0c;采用化学气相沉积法…

基于Springboot的web后端开发三层架构上手实操

引言 我们拿到了xml文件 我们要将将xml文件中的数据加载并解析 完成数据的处理 并且返回给前端页面(result格式) 1.将xml文件放在resources目录下 xml是我们需要解析的文件 查看xml文件 2.在springboot中引入dom4j依赖 解析xml需要在springboot中引入dom4j依赖 这边我们…

Thread类的基本用法

1.线程创建 这里介绍线程创建常用的五种方法 1.继承Thread&#xff0c;重写run class MyThread extends Thread{public void run(){//这里写的代码就是线程要完成的任务while (true){System.out.println("hello thread");try {Thread.sleep(1000);//线程会休眠一秒…

二维码门楼牌管理应用平台建设:取保候审人员管理的新模式

文章目录 前言一、取保候审人员管理的新挑战二、二维码门楼牌管理应用平台的引入三、平台的功能与应用四、优势与挑战五、结论 前言 随着科技的不断进步&#xff0c;二维码门楼牌管理应用平台已成为城市管理的创新手段。特别是在取保候审人员管理领域&#xff0c;这一技术的应…

电视盒子哪款好?实体店主盘点畅销电视盒子排名

电视盒子功能丰富&#xff0c;是升级电视机最具性价比的方案。我本人做实体数码店多年来&#xff0c;电视盒子是店内销量最好的产品之一&#xff0c;最近很多网友在讨论电视盒子哪款好&#xff0c;我整理了店内销量最好的电视盒子排名&#xff0c;想买电视盒子可以看看下面这几…

海外盲盒App开发:探索全球惊喜,开启无限可能

一、前言 随着全球化的深入发展&#xff0c;人们对于不同文化、不同地域的商品充满了好奇与向往。盲盒文化&#xff0c;作为一种充满神秘与惊喜的消费方式&#xff0c;正逐渐在全球范围内受到热烈追捧。为了满足海外用户对于盲盒的需求&#xff0c;我们团队精心策划并开发了一…

盲人安全过马路:科技赋能,独立出行不再难

作为一位资深记者&#xff0c;我长期关注特殊群体的生活现状与科技助力下的改善举措。今天&#xff0c;我要讲述的是盲人朋友在独立出行&#xff0c;尤其是过马路时面临的挑战&#xff0c;以及一款叫做蝙蝠避障的创新辅助应用如何通过实时避障与拍照识别功能&#xff0c;显著提…

IntelliJ IDEA 如何启用 JDK 预览特性

IntelliJ IDEA 也可以启用 JDK 的预览特性。 针对项目&#xff0c;选择项目结构。 配置是在语言结构上。 单击语言结构上的 SDK 默认&#xff0c;往下拉&#xff0c;就可以看到针对新版本的选项。 同时还可以看到那些版本是支持新特性预览的&#xff0c;那些版本是不支持新特…

Vue报错 Cannot read properties of undefined (reading ‘websiteDomains‘) 解决办法

浏览器控制台如下报错&#xff1a; Unchecked runtime.lastError: The message port closed before a response was received. Uncaught (in promise) TypeError: Cannot read properties of undefined (reading websiteDomains) at xl-content.js:1:100558 此问题困扰了…

多目标粒子群算法及其MATLAB实现

多目标粒子群优化&#xff08;Multi-Objective Particle Swarm Optimization, MOPSO&#xff09;算法是一种基于种群的优化算法&#xff0c;它结合了粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;和多目标优化的思想。多目标粒子群&#xff08;MOPSO&am…