天天看點

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,如需轉載請自行聯系原作者

繼續閱讀