成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談Cgroups

開發 開發工具
隨著容器技術的成熟,系統的定制和軟件的打包變得越來越容易,同時,對容器進行監控成為了容器使用者所必備的技能。下來,作者將帶領大家認識一下容器的資源管理工具Cgroups。

在開發一款軟件時,為了延長軟件的生命周期,需要一款配套軟件來對發布的軟件進行監控。隨著容器技術的成熟,系統的定制和軟件的打包變得越來越容易,同時,對容器進行監控成為了容器使用者所必備的技能。下來,作者將帶領大家認識一下容器的資源管理工具Cgroups。

[[266064]]

說起容器監控,首先會想到通過Cadvisor, Docker stats等多種方式獲取容器的監控數據,并同時會想到容器通過Cgroups實現對容器中的資源進行限制。但是這些數據來自哪里,并且如何計算的?答案是Cgroups。最近在寫docker容器監控組件,在深入Cadvisor和Docker stats源碼發現數據都來源于Cgroups。了解之余,并對Cgroups做下筆記。

一、Cgroups介紹

Cgroups 是 control groups 的縮寫,是Linux內核提供的一種可以限制,記錄,隔離進程組(process groups)所使用物理資源的機制。最初有google工程師提出,后來被整合進Linux的內核。因此,Cgroups為容器實現虛擬化提供了基本保證,是構建Docker,LXC等一系列虛擬化管理工具的基石。

二、Cgroups作用

  • 資源限制(Resource limiting): Cgroups可以對進程組使用的資源總額進行限制。如對特定的進程進行內存使用上限限制,當超出上限時,會觸發OOM。
  • 優先級分配(Prioritization): 通過分配的CPU時間片數量及硬盤IO帶寬大小,實際上就相當于控制了進程運行的優先級。
  • 資源統計(Accounting): Cgroups可以統計系統的資源使用量,如CPU使用時長、內存用量等等,這個功能非常適用于計費。
  • 進程控制(ControlCgroups): 可以對進程組執行掛起、恢復等操作。

三、Cgroups 組成

Cgroups主要由task,cgroup,subsystem及hierarchy構成。下面分別介紹下各自的概念。

  • task::在Cgroups中,task就是系統的一個進程。
  • cgroup: :Cgroups中的資源控制都以cgroup為單位實現的。cgroup表示按照某種資源控制標準劃分而成的任務組,包含一個或多個子系統。一個任務可以加入某個cgroup,也可以從某個cgroup遷移到另外一個cgroup。
  • subsystem::Cgroups中的subsystem就是一個資源調度控制器(Resource Controller)。比如CPU子系統可以控制CPU時間分配,內存子系統可以限制cgroup內存使用量。
  • hierarchy::hierarchy由一系列cgroup以一個樹狀結構排列而成,每個hierarchy通過綁定對應的subsystem進行資源調度。hierarchy中的cgroup節點可以包含零或多個子節點,子節點繼承父節點的屬性。整個系統可以有多個hierarchy。

組件之間的關系:

Subsystems, Hierarchies,Control Group和Tasks之間有許多的規則,下面介紹下:

(1) 同一個hierarchy能夠附加一個或多個subsystem。

如下圖,將cpu和memory subsystems(或者任意多個subsystems)附加到同一個hierarchy。

(2) 一個subsystem只能附加到一個hierarchy上。

如下圖,cpu subsystem已經附加到了hierarchy A,并且memory subsystem已經附加到了hierarchy B。因此cpusubsystem不能在附加到hierarchy B。

Cgroups

(3) 系統每次新建一個hierarchy時,該系統上的所有task默認構成了這個新建的hierarchy的初始化cgroup,這個cgroup也稱為root cgroup。對于你創建的每個hierarchy,task只能存在于其中一個cgroup中,即一個task不能存在于同一個hierarchy的不同cgroup中,但是一個task可以存在在不同hierarchy中的多個cgroup中。如果操作時把一個task添加到同一個hierarchy中的另一個cgroup中,則會從第一個cgroup中移除。

如下圖,cpu和memory被附加到cpu_mem_cg的hierarchy。而net_cls被附加到net_cls hierarchy。并且httpd進程被同時加到了cpu_mem_cg hierarchy的cg1 cgroup中和net hierarchy的cg3 cgroup中。并通過兩個hierarchy的subsystem分別對httpd進程進行cpu,memory及網絡帶寬的限制。

Cgroups

(4) 系統中的任何一個task(Linux中的進程)fork自己創建一個子task(子進程)時,子task會自動的繼承父task cgroup的關系,在同一個cgroup中,但是子task可以根據需要移到其它不同的cgroup中。父子task之間是相互獨立不依賴的。

如下圖,httpd進程在cpu_and_mem hierarchy的/cg1 cgroup中并把PID 4537寫到該cgroup的tasks中。之后httpd(PID=4537)進程fork一個子進程httpd(PID=4840)與其父進程在同一個hierarchy的統一個cgroup中,但是由于父task和子task之間的關系獨立不依賴的,所以子task可以移到其它的cgroup中。

Cgroups

四、Cgroups使用

我們直接使用shell 命令直接操作hierarchy并設置cgroup參數。在centos6上也可以直接使用libcgroup提供的工具可簡化對cgroup的使用。

(1) Create a Hierarchy

使用shell命令創建hierarchy并附加subsystems到該hierarchy上。 作為root為hierarchy創建一個mount point。并且在mount point中包含cgrou的名字。

Cgroups

例如:

接下來使用mount命令去掛載hierarchy并附加一個或多個subsystem到該hierarchy上。

例如:

如果想在已有的hierarchy上attch或detach subsystem,可以使用remount操作,例如我們想detach掉memory subsystem。

(2) Unmounting a Hierarchy

可以直接用umount命令來unmount一個已有的Hierarchy:

Cgroups

例如:

Cgroups

(3) Creating Control Groups

直接使用shell命令mkdir創建一個子cgroup:

Cgroups

例如:

(4) Setting Control Cgroup Parameters

在group1中使用echo命令插入0-1到cpuset.cpus,來限制該cgroup中的tasks只能跑在0和1的cpu core上。如下:

(5) Moving a Process to a Control Group

只要將想要限制的進程PID,追加到想要的cgroup的tasks文件中就可以了。例如:將PID=1701的進程放到“/cgroup/cpu_and_mem/group1/”的cgroup中。

五、Subsystem 介紹

  • blkio: blkio 子系統控制并監控cgroup中的task對塊設備的I/O的訪問。如:限制訪問及帶寬等。
  • cpu: 主要限制進程的cpu使用率。
  • cpuacct: 可以統計cgroup中進程的cpu使用報告。
  • cpuset: 可以為cgroup中的進程分配獨立的cpu和內存節點。
  • memory: 自動生成cgroup中task使用的內存資源報告,并對該cgroup的task進行內存使用限制。
  • devices: 可以控制進程能否訪問某些設備。
  • net_cls: 使用等級標識符(clssid)標記網絡數據包,可允許Linux流量控制程序(tc)識別從具體cgroup中生成的數據包。
  • freezer: 可以掛起或回復cgroup中的進程。
  • ns: 可以使不同cgroup中的進程使用不同的namespace。

六、容器使用Cgroups進行資源限制

無論是使用docker run方式直接創建容器,還是通過各類容器編排工具(如:Kubernetes)創建容器,對于容器的限制本質都是通過Cgroups。我們分別使用這兩種方式來創建容器并觀察cgroups:

測試環境:

Cgroups

1. 使用docker run方式創建容器

(1) 限制CPU share,創建兩個容器,則會在運行該容器宿主的/sys/fs/cgroup/cpu/docker/ 下分別創建兩個子cgroup,格式如下。

Cgroups

(2) 創建一個容器,并設置--cpu-shares參數為:1024*10。

Cgroups

查看該容器cgroup的cpu.shares文件內容如下。

Cgroups

(3) 創建一個容器,并設置--cpu-shares參數為: 1024*14。

查看該容器cgroup的cpu.shares文件內容如下。

(4) 兩個容器使用cpu的stats,一個容器分到14核的相對cpu計算時間,另一個容器分到10核的相對cpu計算時間:

Cgroups

2. 限制容器內存使用量

(1) 創建一個容器,限制容器能使用的內存上限為1024M。

Cgroups

(2) 查看容器memory的stats,內存使用率100%。

Cgroups

(3) 當容器使用的內存量超過1024M,則容器會被kill -9掉。

Cgroups

3. 使用Kubenetes容器編排工具創建容器

使用kubernetes編排工具創建的容器,則與容器關聯的cgroup均在運行該容器宿主機的/sys/fs/cgroup/cpu/kubepods/下,具體的格式如下所示:

Cgroups

使用Pod創建一個容器,對應的yaml文件內容如下:

在運行該容器的宿主機上查看該容器的cgroup信息,會觀察到cpu.shares為1核,memory.limit_in_bytes為2G。

相關文章:

  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/ch01
  • https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
  • http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation

【本文是51CTO專欄機構360技術的原創文章,微信公眾號“360技術( id: qihoo_tech)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2019-07-11 06:22:51

Cgroups容器監控

2014-03-14 13:32:52

cgroupsLinux容器

2021-08-18 10:39:13

Ubuntu 21.1Linux 內核開發人員

2023-12-26 00:55:51

資源隔離CPU

2024-08-28 08:48:20

Linux資源隔離

2015-06-05 10:08:27

CgroupsIaaSPaaS

2014-12-01 13:44:03

cgroupscpulimitlinux

2009-06-08 15:14:54

CMDB運維管理摩卡

2011-06-01 14:18:41

JVM

2009-12-01 10:29:42

BSM

2009-06-26 17:34:29

Spring入門

2009-09-09 15:44:22

Linq DataCo

2023-03-06 08:42:45

KCP移動開發

2012-12-24 13:50:54

2017-02-23 07:00:25

2009-11-05 14:08:16

機房監控

2009-09-15 16:31:15

LINQ Custom

2009-09-23 17:07:31

Hibernate C

2009-07-16 16:01:55

EventQueue

2009-09-21 13:05:18

Hibernate u
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日躁狠狠躁aaaaxxxx | 国产一区二区三区免费 | av在线视| 九九热精品免费 | 亚洲成人久久久 | 草草网| 99日韩| 国产精品久久久久久久久久 | 亚洲狠狠爱 | 精品久久久久久久久久久久久久 | 国产乱一区二区三区视频 | 免费在线一区二区 | 在线日韩福利 | 亚洲精品久久久久久久久久久 | 日韩免费一二三区 | 国产在线一级片 | 久久久精| 不卡一二区| 国产精品久久久久久久午夜片 | 国产精品永久免费 | 天天玩夜夜操 | 久草a√ | 日韩中文字幕一区二区三区 | 国产伦精品一区二区三毛 | a亚洲精品 | 国产成人精品一区二区三区在线观看 | 国产一区二区久久 | 国产精品久久 | 国产精品日韩欧美一区二区三区 | 久久成人免费观看 | 欧美日韩中文在线观看 | 九九热视频这里只有精品 | 综合五月婷 | 久久久久久久久久久91 | 午夜免费电影 | 国产成人av在线 | 亚洲精品乱码久久久久久蜜桃91 | 特级丰满少妇一级aaaa爱毛片 | 中文字幕一区二区三区四区 | 国产精品网页 | 成人在线一区二区 |