国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux技術中Cgroup的原理和實踐

454398 ? 來源:博客園 ? 作者:遙望那云端 ? 2020-10-15 14:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、什么是Cgroup,使用場景?

容器本質上是進程,既然是進程就會消耗掉系統資源,比如:CPU、內存、磁盤、網絡帶寬等,如果不加以限制,容器在某些情況下就會無限制地吃掉宿主機的系統資源,顯然這不是我們期望發生的,另外當我們的環境中運行了很多容器,且系統資源一定的情況下,我們有優先保證主要容器應用的需求,如何既能夠解決此問題同時又能夠滿足我們的需求呢?答案就是:Linux Cgroup(全程Linux Control Group),在前面的文章中,介紹了namespace為容器這類進程提供了隔離,而Cgroup可以為容器這類進程提供資源使用上限,兩者黃金搭檔,共同為容器應用保駕護航。

二、Cgroup的原理和實踐

CPU的周期控制

Cgroup可以為容器進程使用的CPU、內存、磁盤、網絡帶寬資源進行限制,具體是如何實現的呢?接下來我們一起來實操下,在 Linux 中,Cgroups 給用戶暴露出來的操作接口是文件系統,即它以文件和目錄的方式組織在操作系統的 /sys/fs/cgroup 這個路徑下,我們先去此目錄查看下

[root@k8s-master /]# cd sys/fs/cgroup/ [root@k8s-master cgroup]# ls blkio cpuacct cpuset freezer memory net_cls,net_prio perf_event rdma cpu cpu,cpuacct devices hugetlb net_cls net_prio pids systemd

可以看到在cgroup的這個目錄下存在很多子目錄,這些都是cgroup可以限制地資源種類,我們在進一步進入到CPU的子目錄查看下,里面有限制資源種類的詳細的限制地指標,比如

1、cpu.cfs_period_us:指定容器對CPU的使用多長時間重新做一次分配

2、cpu.cfs_quota_us:指在cpu.cfs_period_us周期內給分配多少時間給容器

這兩個指標需要一起配合使用來實現CPU的周期控制,我們先手動模擬容器創建的時候,如何完成利用cgroup來實現資源限制,以CPU周期控制為例子,先在/sys/fs/cgroup/cpu目錄下創建1個container_

test的目錄,如下所示我已經創建好(紅色字體)。

[?。蹚椭拼a](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

[root@k8s-master cgroup]# cd cpu [root@k8s-master cpu]# ls cgroup.clone_children cpuacct.usage_all cpu.cfs_period_us docker cgroup.procs cpuacct.usage_percpu cpu.cfs_quota_us kubepods cgroup.sane_behavior cpuacct.usage_percpu_sys cpu.rt_period_us notify_on_release container_test cpuacct.usage_percpu_user cpu.rt_runtime_us release_agent cpuacct.stat cpuacct.usage_sys cpu.shares system.slice cpuacct.usage cpuacct.usage_user cpu.stat tasks

[?。蹚椭拼a](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

然后進入到此目錄下,ls查看下,這里出現了一個神奇的形象,此目錄下自動生成了很多CPU子系統控制的指標,這些指標我們并未進行新增,也就是說在/sys/fs/cgroup/cpu目錄下會給新建的目默認配置CPU子系統資源限制的指標

[?。蹚椭拼a](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

[root@k8s-master cpu]# cd container_test/ [root@k8s-master container_test]# ls cgroup.clone_children cpuacct.usage_percpu cpu.cfs_period_us cpu.stat cgroup.procs cpuacct.usage_percpu_sys cpu.cfs_quota_us notify_on_release cpuacct.stat cpuacct.usage_percpu_user cpu.rt_period_us tasks cpuacct.usage cpuacct.usage_sys cpu.rt_runtime_us cpuacct.usage_all cpuacct.usage_user cpu.shares

[?。蹚椭拼a](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

這些指標如何作用呢?為了體現資源的使用情況,我們先寫一個程序來模擬來吃掉系統資源的情況,然后再來查看指標

[root@k8s-master sh]# cat while.sh #!/bin/bash while : ; do : ; done &

[root@k8s-master sh]# sh while.sh

通過如上程序,寫了一個while無限循環的shell腳本,默認情況下,這個程序之后的進程會占據掉系統所剩集群的所有資源,可通過top命令查看下

[root@k8s-master sh]# ps -ef |grep while root 14975 1 97 20:29 pts/1 00:02:48 sh while.sh

如上圖所示,while循環的進程占據掉了96.3%的CPU資源,在實際的應用中若進程這樣無限制的使用資源,將會給操作系統帶來很大的負擔,那么如何控制進程資源的使用呢?回到我們之前創建在container_test目錄下

[root@k8s-master container_test]# cat cpu.cfs_quota_us -1 [root@k8s-master container_test]# cat cpu.cfs_period_us 100000

默認創建的目錄下cfs_quota_us 若為-1,則表示還未啟用quota,即還未實行資源限制,cfs_period_us默認為100000us=100ms=0.1s(秒),接下來我們向cpu.cfs_quota_us 輸入30ms=30000us,cfs_period_us值維持不變還是為100ms,在前面關于這2個概念有介紹,cpu.cfs_quota_us表示的是cfs_period_us的周期內,分配30/100的時間,即30%,接下來驗證下

[root@k8s-master container_test]# echo 30000 》 /sys/fs/cgroup/cpu/container_test/cpu.cfs_quota_us

[root@k8s-master container_test]# cat cpu.cfs_quota_us

30000

設置已完成,但是此時還不會立即生效,還需要將進程ID輸入到資源限制地task里

[root@k8s-master container_test]# echo 14975 》 /sys/fs/cgroup/cpu/container_test/tasks

接下來我們在通過top查看下資源使用情況,如下圖所示,可以看到CPU的資源使用上限由原來的96.3%已經降到29.9%了,表明此while進程的CPU的資源使用上限已經設置成功。

以上整個過程為手動設置模擬容器創建的過程中CPU份額控制的過程,實際上在容器創建的過程中,并不需要上面這般步驟,我們只需要在run容器的時候指定指標參數即可,如下所示

[root@k8s-master container_test]# docker run -it -d --cpu-period=100000 --cpu-quota=30000 nginx /bin/bash

上面的命令是后臺守護進程的方式運行了1個nginx的容器,且指定CPU的每隔100000us=100ms做一次分配,且每次分配給容器的時間為30ms,可以看到這個分配和前面手動分配是一致的,值得注意的是這里需要加上-d來創建容器,若不加上的話會進入到終端交互界面,一旦提出終端交互界面后,容器這個進程也將會退出,而我們希望容器進程保持后臺運行,因此需要加上-d,容器運行成功后,將會在docker目錄下新建一個以容器ID命名的目錄,這個目錄和前面手動創建的目錄以上,系統會默認配置資源限制的參數,我們可以如下看下:

[root@k8s-master container_test]# docker run -it -d --cpu-period=100000 --cpu-quota=30000 nginx /bin/bash 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a

[?。蹚椭拼a](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

[root@k8s-master docker]# ls 01a0fd62d2110e54b0c3635b2897e7c18e6b78f026fa57b4214d7662dd3b38ba cpuacct.usage_sys 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a cpuacct.usage_user cgroup.clone_children cpu.cfs_period_us cgroup.procs cpu.cfs_quota_us cpuacct.stat cpu.rt_period_us cpuacct.usage cpu.rt_runtime_us cpuacct.usage_all cpu.shares cpuacct.usage_percpu cpu.stat cpuacct.usage_percpu_sys notify_on_release cpuacct.usage_percpu_user tasks

[?。蹚椭拼a](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

如上紅色部分為docker目錄下依據容器的名稱默認創建的目錄,我們進入到這個目錄,然后輸出下之前我們在創建的時候指定的cpu.cfs_quota_us和cfs_period_us值

[root@k8s-master 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a]# cat cpu.cfs_period_us 100000

[root@k8s-master 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a]# cat cpu.cfs_quota_us 30000

可以看到我們之前設置的值已經生效了,也就是說這個nginx的容器最多可以支持使用到30%左右的CPU帶寬。

相類似的我們可以對容器獲取CPU的資源的優先級進行設置,通過--cpu-share這個參數,其指定的值并非是給容器具體的份額,其實是個權重,在需要對容器資源進行限制時才會生效,權重大的,可以優先得到CPU的資源;另外還可以對使用的核數進行限制,針對多核的服務器,可以控制容器運行限定使用哪些CPU內核和內存節點,即使用-cpuset-cpus和-cpuset-mens參數,比如:我們可以指定創建的容器只能用0、1、2三核。

三、總結

本文以CPU中周期控制限制某進程的CPU資源使用為例子,介紹了其手動設置參數和容器自動設置參數,每新建1個容器,在/sys/fs/cgroup/cpu/docker目錄下都會自動以容器的ID為名字創建1個目錄,且在此目錄下支持對CPU、內存、網絡帶寬、磁盤的資源使用進行限制,而其限制地處理與CPU的周期控制是類似的,這里就未做過多介紹
編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11279

    瀏覽量

    224987
  • Linux
    +關注

    關注

    88

    文章

    11760

    瀏覽量

    219033
  • 容器
    +關注

    關注

    0

    文章

    531

    瀏覽量

    22965
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    利用Last Log(Ramoops)排查系統問題:配置與實踐指南

    Linux 內核的ramoops機制實現)可在系統異常時保存核心日志,為事后故障分析提供關鍵依據。本文將詳細介紹其配置方法與問題排查實踐,并通過具體案例演示實戰流程。
    的頭像 發表于 02-05 13:54 ?240次閱讀
    利用Last Log(Ramoops)排查系統問題:配置與<b class='flag-5'>實踐</b>指南

    實踐赴熱愛:我在深圳技術大學的開源鴻蒙成長之旅

    從對開源技術一知半解的入門者,到能夠獨立參與開源項目、斬獲競賽獎項的實踐者,開源鴻蒙不僅打開了技術探索的大門,更重塑了學習方式與職業認知。 在學校搭建的多梯度開源培養體系,深圳
    的頭像 發表于 02-04 11:06 ?254次閱讀
    以<b class='flag-5'>實踐</b>赴熱愛:我在深圳<b class='flag-5'>技術</b>大學的開源鴻蒙成長之旅

    RK?平臺升級開發:全場景方案與實踐指南,覆蓋常規系統和ab系統

    ? ? ? ? ? ? 在嵌入式 Linux 開發領域,瑞芯微( Rockchip )平臺憑借其穩定的性能和豐富的生態支持,被廣泛應用于各類智能設備。而設備的升級功能作為保障產品生命周期、優化
    的頭像 發表于 01-13 15:35 ?1197次閱讀
    RK?平臺升級開發:全場景方案與<b class='flag-5'>實踐</b>指南,覆蓋常規系統和ab系統

    華為構網型儲能技術進展與商用實踐

    11月24日,以“加速構網技術應用實證,支撐新型電力系統高質量發展”為主題的構網型儲能應用與發展論壇在長沙舉辦。華為數字能源構網型儲能領域總裁鄭越發表題為“華為構網型儲能技術進展與商用實踐”的主旨演講,全面分享了華為在構網型儲能
    的頭像 發表于 12-01 10:54 ?810次閱讀

    【書籍評測活動NO.67】成為硬核Linux開發者:《Linux 設備驅動開發(第 2 版)》

    ——這便是《Linux 設備驅動開發》。本書從基礎知識出發,分專題透徹講解Linux環境下的設備驅動開發知識,幫助讀者從零構建驅動程序。如今4年過去,作者緊跟技術發展,對內容進行了大量更新,推出
    發表于 11-17 17:52

    CI/CD實踐中的運維優化技巧

    在數字化轉型的浪潮,CI/CD已經成為現代軟件開發的基石。然而,真正能夠發揮CI/CD威力的,往往在于那些不為人知的運維優化細節。本文將深入剖析CI/CD實踐中的關鍵優化技巧,幫助您構建更高效、更穩定的持續集成與部署體系。
    的頭像 發表于 09-18 15:05 ?1198次閱讀

    軟國際多領域數聚智能方案的實踐分享

    近日,2025國國際大數據產業博覽會(以下簡稱“數博會”)在貴州省貴陽市盛大開幕。展會期間,軟國際華為技術與解決方案集團云應用與服務業務線總裁胡啟明,在華為展區(W1館C01)發表了題為《多領域
    的頭像 發表于 09-01 11:42 ?688次閱讀

    軟國際全場景AI實踐

    近日,軟國際與華為云“同舟共濟”戰略合作8周年慶典暨“云智能行業賦能,全場景AI正當時”高峰論壇隆重舉行,會上軟國際副總裁、AI研究院院長萬如意博士發表了題為《軟國際全場景AI實踐
    的頭像 發表于 07-24 16:32 ?1039次閱讀

    一文掌握Linux命令

    作為一名運維工程師,熟練掌握Linux命令是基本功的基本功。無論是日常工作的系統維護,還是面試時的技術考核,Linux命令都是繞不開的核
    的頭像 發表于 07-22 15:23 ?619次閱讀

    生產環境Kubernetes容器安全的最佳實踐

    隨著容器化技術的快速發展,Kubernetes已成為企業級容器編排的首選平臺。然而,在享受Kubernetes帶來的便利性和可擴展性的同時,安全問題也日益凸顯。本文將從運維工程師的角度,深入探討生產環境Kubernetes容器安全的最佳
    的頭像 發表于 07-14 11:09 ?735次閱讀

    Linux網絡管理的關鍵技術和最佳實踐

    在大型互聯網企業,Linux網絡管理是運維工程師的核心技能之一。面對海量服務器、復雜網絡拓撲、高并發流量,運維人員需要掌握從基礎網絡配置到高級網絡優化的全套技術棧。本文將結合大廠實際場景,深入解析
    的頭像 發表于 07-09 09:53 ?949次閱讀

    怎么結合嵌入式,Linux,和FPGA三個方向達到一個均衡發展?

    在嵌入式領域,不少人都懷揣著讓嵌入式、Linux 和 FPGA 三個方向實現均衡發展的夢想,然而實踐中卻面臨諸多挑戰。就像備受矚目的全棧工程師稚暉君,他從大學玩單片機起步,憑借將智能算法融入嵌入式而
    的頭像 發表于 06-25 10:08 ?863次閱讀
    怎么結合嵌入式,<b class='flag-5'>Linux</b>,和FPGA三個方向達到一個均衡發展?

    手把手教你如何調優Linux網絡參數

    在高并發網絡服務場景Linux內核的默認網絡參數往往無法滿足需求,導致性能瓶頸、連接超時甚至服務崩潰。本文基于真實案例分析,從參數解讀、問題診斷到優化實踐,手把手教你如何調優Linux
    的頭像 發表于 05-29 09:21 ?966次閱讀

    詳解Linux系統的服務管理

    Linux,無論何時當你安裝任何帶有服務和守護進程的包,系統默認會把這些服務的初始化及 systemd腳本添加進去,不過此時它們并沒有被啟用。
    的頭像 發表于 05-23 15:10 ?836次閱讀
    詳解<b class='flag-5'>Linux</b>系統<b class='flag-5'>中</b>的服務管理

    5G動態IP地域偽裝技術:突破與實踐中的合規邊界

    在5G網絡加速普及的當下,智能設備的指數級增長正催生著IP地址管理的技術革命??缇畴娚獭⑤浨楸O控等領域對動態住宅IP地域偽裝的需求,已從簡單的協議層操作演變為涉及網絡架構重構的系統工程。本文將聚焦技術演進的主線,探討這一領域的技術
    的頭像 發表于 04-29 15:47 ?1135次閱讀