第三章 Docker容器(2)

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

      本节将介绍如何使用 Docker 的资源管理给容器的资源使用设置一个闻值,以控制容器 对宿主机CPU、内存和I/O带宽的使用

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

    LinuxCGroup主要提供了以下功能。

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

要使用 Linux CGroup,则需要先通过执行以下步骤确定 Linux 的内核是否启用了 Linux CGroup。 (1)确定操作系统的发行版本

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

[root@node7 ~]# cat /boot/config-3.10.0-957.el7.x86_64 | grep CGROUP

下面通过示例来演示如何使用LinuxGroup实现对系统资源的控制

通过LinuxCGroup限制应用的CPU使用率

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

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

[root@node7 ~]# vim hello.c

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

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

[root@node7 ~]# gcc -o hello hello.c
[root@node7 ~]# ./hello

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

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

[root@node7 ~]# cd /sys/fs/cgroup/cpu/
[root@node7 cpu]# mkdir hello

(5)切换文件hello查看文件cpu.cfsquota us的内容为“-1”,表示没有对其CPU使用率进行限制

(6)执行以下语句将CPU使用率的闻值设置为20%。

[root@node7 hello]# echo 20000 > cpu.cfs_quota_us

(7)将应用hello的进程ID写入tasks 文件

root@node7 hello]# echo 9264 > tasks

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

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

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值