天天看点

Cgroups控制cpu,内存,io示例

百度私有PaaS云就是使用轻量的cgoups做的应用之间的隔离,以下是关于百度架构师许立强,对于虚拟机VM,应用沙盒,cgroups技术选型的理解

Cgroups控制cpu,内存,io示例

本文用脚本运行示例进程,来验证Cgroups关于cpu、内存、io这三部分的隔离效果。

测试机器:CentOS release 6.4 (Final)

启动Cgroups

在/cgroup,有如下文件夹,默认是多挂载点的形式,即各个子系统的配置在不同的子文件夹下

跑一个耗cpu的脚本

top可以看到这个脚本基本占了100%的cpu资源

下面用cgroups控制这个进程的cpu资源

然后top的实时统计数据如下,cpu占用率将近50%,看来cgroups关于cpu的控制起了效果

cpu控制组foo下面还有其他的控制,还可以做更多其他的关于cpu的控制

跑一个耗内存的脚本,内存不断增长

top看内存占用稳步上升

下面用cgroups控制这个进程的内存资源

发现之前的脚本被kill掉

因为这是强硬的限制内存,当进程试图占用的内存超过了cgroups的限制,会触发out of memory,导致进程被kill掉。

实际情况中对进程的内存使用会有一个预估,然后会给这个进程的限制超配50%比如,除非发生内存泄露等异常情况,才会因为cgroups的限制被kill掉。

也可以通过配置关掉cgroups oom kill进程,通过memory.oom_control来实现(oom_kill_disable 1),但是尽管进程不会被直接杀死,但进程也进入了休眠状态,无法继续执行,仍让无法服务。

关于内存的控制,还有以下配置文件,关于虚拟内存的控制,以及权值比重式的内存控制等

<code>[root@localhost /]</code><code># ls /cgroup/memory/foo/</code>

<code>cgroup.event_control  memory.force_empty         memory.memsw.failcnt             </code>

<code>memory.memsw.usage_in_bytes      memory.soft_limit_in_bytes  memory.usage_in_bytes  tasks</code>

<code>cgroup.procs          memory.limit_in_bytes      memory.memsw.limit_in_bytes      </code>

<code>memory.move_charge_at_immigrate  memory.stat                 memory.use_hierarchy</code>

<code>memory.failcnt        memory.max_usage_in_bytes  memory.memsw.max_usage_in_bytes  </code>

<code>memory.oom_control               memory.swappiness           notify_on_release</code>

跑一个耗io的脚本

通过iotop看io占用情况,磁盘速度到了284M/s

下面用cgroups控制这个进程的io资源

再通过iotop看,确实将读速度降到了1M/s

对于io还有很多其他可以控制层面和方式,如下

<code>[root@localhost ~]</code><code># ls /cgroup/blkio/foo/</code>

<code>blkio.io_merged         blkio.io_serviced      blkio.reset_stats                </code>

<code>blkio.throttle.io_serviced       blkio.throttle.write_bps_device   blkio.weight          cgroup.procs</code>

<code>blkio.io_queued         blkio.io_service_time  blkio.sectors                    </code>

<code>blkio.throttle.read_bps_device   blkio.throttle.write_iops_device  blkio.weight_device   notify_on_release</code>

<code>blkio.io_service_bytes  blkio.io_wait_time     blkio.throttle.io_service_bytes  </code>

<code>blkio.throttle.read_iops_device  blkio.</code><code>time</code>                        <code>cgroup.event_control  tasks</code>

 本文转自 326647452 51CTO博客,原文链接:http://blog.51cto.com/svsky/2082896,如需转载请自行联系原作者

继续阅读