首页 > 其他分享 >docker 容器技术--资源限制

docker 容器技术--资源限制

时间:2023-07-31 10:33:21浏览次数:40  
标签:容器 stress 限制 -- 子系统 docker cpu

资源限制

资源类型          

可压缩资源
 CPU 磁盘 网络。。。
不可压缩资源
 内存。。。

资源限制原理--CGROUP

CGROUP概念

Linux Cgroup 全称 Linux Control Group, 是 Linux 内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 CPU、内存、磁盘输入输出等)。这个项目最早是由 Google 的工程师在 2006 年发起,最早的名称为进程容器( process containers )。在 2007 年时,因为在 Linux 内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为 cgroup,并且被合并到 2.6.24 版的内核中去。

CGROUP功能

限制资源使用
优先级控制
一些审计或一些统计
挂起进程,恢复执行进程
# 详细划分
cpu 子系统,主要限制进程的 cpu 使用率
cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告
cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点
memory 子系统,可以限制进程的 memory 使用量
blkio 子系统,可以限制进程的块设备 io
devices 子系统,可以控制进程能够访问某些设备
net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制
net_prio — 这个子系统用来设计网络流量的优先级
freezer 子系统,可以挂起或者恢复 cgroups 中的进程
ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace
hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统

CGROUP资源限制实验

# 查看 Cgroup 挂载点 ,挂载。
$ mount -t cgroup
# 进入目录,创建隔离组
$ cd /sys/fs/cgroup/cpu
$ mkdir cpu_test
# tasks存放系统运行的进程
# 安装C语言编译环境
$ yum -y install gcc gcc-c++
# 在家目录下创建循环叠加测试文件
$ vim main.c
int main(void)
{ 
    int i = 0;
    for(;;) i++;
    return 0;
}
# 编译
$ gcc main.c
$ chmod a+x a.out
# 新开窗口top命令监测CPU使用率
$ top
# 添加资源限制,并观察CPU使用情况是否限制
$ cd /sys/fs/cgroup/cpu/cpu_test
$ echo 23732 >> /sys/fs/cgroup/cpu/cpu_test/tasks
# 划分配额,默认配额100000
$ echo 20000 > /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us
# 证明了资源限制可行性

内存资源限制

默认情况下,如果不对容器做任何限制,容器能够占用当前系统能给容器提供的所有资源
    > Docker 限制可以从 Memory、CPU、Block I/O 三个方面
    > OOME:Out Of Memory Exception
        >> 一旦发生 OOME,任何进程都有可能被杀死,包括 docker daemon 在内
        >> 为此,Docker 调整了 docker daemon 的 OOM 优先级,以免被内核关闭

docker 容器技术--资源限制_docker

CPU资源限制

> 默认情况下,如果不对容器做任何限制,容器能够占用当前系统中的所有 CPU 资源
    > 大多数进程是采用 CFS 调度算法
    > 1.13 Docker 版本后支持实时调度算法

docker 容器技术--资源限制_docker_02

限制实验

# 上传并导入压测软件包
$ docker load -i stress.tar
# 内存使用限制
$ docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2 
# docker run 运行 --name 指定名称 -it 交互模式 --rm 停止即删除 -m 内存限制大小 指定镜像名称:版本号 指定容器内部运行的命令(2个线程压测)
# 查看压测结果
$ docker stats
# CPU核心数量限制
$ docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8  
# 绑定cpu节点限制
$ docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8

标签:容器,stress,限制,--,子系统,docker,cpu
From: https://blog.51cto.com/jiaweiCTO/6905882

相关文章

  • vue + vite 在index.html中使用环境变量
    npminstallvite-plugin-html-Dvite.config.jsimport{createHtmlPluginasuseHtmlLoader}from'vite-plugin-html'useHtmlLoader({inject:{data:{title:VITE_APP_BASE_URL,},},}),index.html可以使用啦!!!<pclass=&quo......
  • Maven implicit Properties(隐含变量)
    http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-properties.htmlMaven:TheCompleteReference9.2. MavenPropertiesPrev:9.1. IntroductionTOCNext:9.3. ResourceFiltering9.2. MavenPropertiesYoucanuseMavenproper......
  • 2023 CISCN 第十六届全国大学生信息安全竞赛 初赛 WriteUp
    2023CISCN第十六届全国大学生信息安全竞赛初赛WriteUp引言第十六届全国大学生信息安全竞赛——创新实践能力赛http://www.ciscn.cn/competition/securityCompetition?compet_id=38时光荏苒,又是一年一度的国赛了!这篇writeup是xdlddw战队的队友一起写的,非常感谢队......
  • python调整菜单
    如何使用Python调整菜单作为一名经验丰富的开发者,我将向你详细介绍如何使用Python调整菜单。在本文中,我将按照以下步骤指导你完成这个任务:导入所需库创建菜单调整菜单项顺序打印调整后的菜单下面是每个步骤需要做的事情以及相应的代码示例:1.导入所需库首先,我们需要导入c......
  • python调用三角函数
    Python调用三角函数三角函数是数学中重要的概念之一,广泛应用于数学、物理、工程等领域。在Python中,我们可以通过调用内置的数学库来使用三角函数。引入数学库在使用三角函数之前,我们需要先引入Python的数学库。Python的数学库math提供了一系列的数学函数,包括三角函数、指数函数......
  • python调用软件
    Python调用软件Python是一种易于学习和使用的编程语言,因其强大的生态系统和丰富的库而受到广泛关注。Python不仅可以用于数据分析、Web开发和人工智能等领域,还可以通过调用外部软件实现更多功能。本文将介绍如何使用Python调用软件,并提供一些代码示例。调用外部软件的方法Python......
  • Java NIO系列教程(十一) Pipe
    JavaNIO管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示: 创建管道通过Pipe.open()方法打开管道。例如:Pipepipe=Pipe.open();向管道写数据要向管道写数据,需要访问sink通道。像这样:Pi......
  • python调用其他py文件的变量
    Python调用其他py文件的变量在Python中,我们常常需要调用其他Python文件中定义的变量。这样可以避免在不同的文件之间重复定义和初始化变量,提高代码的复用性和可维护性。本文将介绍几种常见的方法来实现Python文件之间的变量调用。方法一:导入模块在Python中,我们可以将变量定义在......
  • 使用Eclipse构建Maven的SpringMVC项目
    使用Eclipse构建Maven的SpringMVC项目      首先Eclipse需要安装Maven的插件,地址:http://m2eclipse.sonatype.org/sites/m2e。     用MyEclipse安装Maven插件,建出的Maven项目有些问题。一是,发布tomcat的时候resources总是不会被发布到tomcat下;二是,把WEB-INF下的cla......
  • Java NIO系列教程(三) Buffer
    JavaNIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIOBuffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIOBuffer相关的话题列表: Buffe......