当前位置: 首页 > news >正文

【赵渝强老师】Docker容器的资源管理机制

1

​在一台Docker宿主机上可以同时启动多个容器。在默认情况下,Docker的引擎对运行的容器没有限制硬件资源的使用。而在实际环境下,容器的负载过高会导致占用宿主机的大量资源。这里的资源主要是指宿主机的CPU、内存和I/O带宽这3个方面。

image.png
点击这里查看视频讲解:【赵渝强老师】Docker容器的资源管理机制

一、 什么是Linux CGroup?

由于Docker是构建在Linux的基础之上,因此从Linux底层看,Docker是利用了Linux Control Group(简称Linux CGroup)实现了对资源使用的控制。因此,要掌握Docker容器的资源管理,有必要先了解一下什么是Linux CGroup。

Linux CGroup是Linux下的一些进程,通过这些进程可以限制应用程序对资源的使用。并且,通过Linux CGroup可以对系统资源做精细化控制。例如,可以实现对每个容器使用的CPU比率进行限制。

Linux CGroup主要提供了以下的功能。

  • Resource limitation:限制资源使用,例如,使用CPU及内存的上限。
  • Prioritization:应用程序的优先级控制,例如,控制任务的调度。
  • Accounting:应用程序的审计和统计,例如,实现应用程序的计费。
  • Control:实现对应用程序的控制,例如,应用程序的挂起、恢复和执行等。

要是使用Linux CGroup功能,则需要先通过执行下面的步骤确定Linux的内核是否启用了Linux CGroup功能。

(1)确定操作系统的发行版号,如下图所示。

2

(2)根据操作系统的发行版号,可以确定是否启用了Linux CGroup功能。下图中的CGROUP参数的值是“y”,表示已经启动Linux CGroup对应的功能特性。

cat /boot/config-3.10.0-693.el7.x86_64 | grep CGROUP

3

了解了Linux CGroup功能特性后,下面将通过3个示例来演示如何使用Linux Group实现对系统资源使用的控制。

二、 通过Linux CGroup限制应用程序的CPU使用率

在本示例中,将利用C语言开发一段执行死循环的代码。由于是死循环,所以代码的CPU使用率将很高。然后通过使用Linux CGroup,将代码的CPU使用率限制在一定范围内,如20%。下面是具体的操作步骤。

(1)开发一段C程序代码产生一个死循环,并将代码保存为hello.c。

//hello.c
int main(void)
{int i = 0;for(;;) i++;return 0;
}

(2)将程序代码进行编译。

gcc -o hello hello.c

(3)执行程序代码,这时程序将产生死循环无法退出。

./hello

(4)在一个新的命令行窗口中,使用“top”命令监控应用程序hello的CPU使用率,可以看到已经达到了99.7%,如下图所示。

4

(5)进入“/sys/fs/cgroup/cpu/”目录下,创建一个新的子目录hello。该目录用于设置CPU使用率的阈值,如下图所示。

cd /sys/fs/cgroup/cpu/
mkdir hello
cd hello/
ls

5

(6)查看文件cpu.cfs_quota_us的内容为“-1”,表示没有对其CPU使用率进行限制。

(7)执行下面的语句将CPU使用率的阈值设置为20%。

echo 20000 > cpu.cfs_quota_us  

(8)将应用程序hello的进程ID号写入tasks文件,如下图所示。

echo 21503 > tasks

6

(9)再次观察“top”命令的输出信息,发现应用程序hello的CPU使用率降到了20%,如下图所示。

7

(10)重新启动一个hello应用程序,并按照上面的步骤将进程ID号写入tasks文件。这时观察“top”命令的输出会发现,两个hello应用程序各自占用10%的CPU使用率,如下图所示。

8

二、 通过Linux CGroup限制应用程序使用系统内存

具体的操作步骤如下。

(1)进入“cd /sys/fs/cgroup/memory” 目录下,创建子目录hello。

cd /sys/fs/cgroup/memory
mkdir hello
cd hello

(2)查看文件memory.limit_in_bytes的内容。

more memory.limit_in_bytes# 这里设定的值是9223372036854771712,表示没有对内存进行任何的限制

(3)下面的语句会将内存的阈值设置为64KB。如果应用程序使用的内存超过了该值,则该应用程序会被操作系统自动“杀掉”。

echo 64k > memory.limit_in_bytes

(4)生效配置,将应用程序hello的进程ID号写入tasks文件。

echo 21503 > tasks

三、 通过Linux CGroup限制应用程序使用I/O带宽

为了更好地观察结果,首先安装iotop工具。

yum -y install iotop# iotop是一个用来监视磁盘I/O使用状况的工具,包括pid、user、I/O、进程等相关信息。

下面的步骤演示了如何使用Linux CGroup限制应用程序使用I/O带宽。

(1)使用Linux的“dd”命令从磁盘持续读写数据。

dd if=/dev/sda of=/dev/null

(2)通过iotop工具查看I/O读取的速度为569.04 MB/s,如下图所示。

9

(3)查看设备“/dev/sda”的信息。从下图中可以看到,设备“/dev/sda”的设备号是“disk 8,0”。

ls -l /dev/sda

10

(4)使用Linux CGroup限制I/O对设备“/dev/sda”的读取速率。

mkdir /sys/fs/cgroup/blkio/io
cd /sys/fs/cgroup/blkio/io
echo '8:0 1048576'  > blkio.throttle.read_bps_device# 通过这样,对该设备的读取速率被限制在了1MB/s之内了。

(5)将“dd”命令的进程ID号21681写入tasks文件。

echo 21681 > tasks

(6)再次观察iotop工具的监控输出信息,会发现这时“dd”命令对该设备的读取速率已经被设置了1.00 MB/s,如下图所示。

11

了解了Linux CGroup的功能后,再来讨论“Docker是如何对容器使用的资源进行设定”就变得非常简单了。Docker只是对Linux CGroup进行了封装,从而简化了调用操作的方式。

http://www.jsqmd.com/news/112834/

相关文章:

  • 2025年12月国内平行双螺杆挤出机品牌排行:口碑好的厂家推荐!哪家好细致分析! - 品牌推荐用户报道者
  • 家装指南:2025年厦门口碑装修公司精选攻略 - 品牌测评鉴赏家
  • 2025年泥浆泵活塞工厂权威推荐榜:铜骨架由壬密封厂/泥浆泵胶皮/软盘根加工厂精选 - 品牌推荐官
  • 2025年厦门口碑装修公司精选与避坑攻略 - 品牌测评鉴赏家
  • 厦门原创设计装修公司全解析:从风格到落地的匠心之选 - 品牌测评鉴赏家
  • 新手PM必学:多项目并行任务优先级怎么排(含RICE等思路)
  • postgresql数据库连接数限制
  • 考完软件工程啦
  • MATLAB实现Bouc-Wen模型动力响应计算
  • 关于java中类和对象的学习总结
  • 2025/12/19 今天学的day7的总结
  • 【赵渝强老师】Docker的图形化管理工具
  • 办公室翻新公司推荐:行业优质选择与服务解析 - 品牌排行榜
  • 2025年红点奖申报资深企业TOP5推荐,把握红点奖的获奖机会 - myqiye
  • 展厅设计公司有哪些?国内优质机构实力推荐 - 品牌排行榜
  • 广州雅思培训机构推荐:本地优质学习机构一览 - 品牌排行榜
  • 2025年多槽超声波清洗机专业厂家推荐,清洗设备品牌厂商与厂商全解析 - 工业推荐榜
  • 年终报告 | 2025年中国AI客服机器人市场格局与最佳实践选型 - 品牌2025
  • 2025 年 12 月锡条厂家权威推荐榜:精选高温抗氧化锡条,揭秘卓越焊接性能与长效稳定性的行业首选 - 品牌企业推荐师(官方)
  • 2025年度十大顶尖广告公司,揭秘行业领军者!上海做得好的广告4A公司排行帕特广告专注产品质量 - 品牌推荐师
  • 2025/12/19 今天学的day6的lecode24和19
  • 2025 陕西办公室装修设计公司五大推荐,西安装修公司哪家靠谱?大品装修领衔实力之选 - 深度智识库
  • 2025年12月GEO,GEO优化,GEO技术公司推荐:行业测评与选择指南 - 品牌鉴赏师
  • 2025年电磁铁吊车生产厂家权威推荐榜单:吸盘式电磁铁/电磁吊具吸盘/天车电磁吊源头厂家精选 - 品牌推荐官
  • Panasonic Programming Contest 2025(AtCoder Beginner Contest 427)
  • 2025年12月智能数控机床实力厂家权威推荐榜:专机/双头对接/线轨硬轨/重型机床全品类深度解析与选购指南 - 品牌企业推荐师(官方)
  • 青岛超级学长怎么样?本地出国语培机构业务与服务解析 - 品牌排行榜
  • iOS 组合布局(UICollectionViewCompositionalLayout)
  • Nginx和网关的区别
  • 2025年12月毛衣针织厂家权威推荐榜:高领/长款/羊绒/小香风,男士女士儿童全品类,甄选柔软亲肤与时尚设计口碑之选 - 品牌企业推荐师(官方)