最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

MemCgroup目錄無法清理問題分析

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 13:22:23
文檔

MemCgroup目錄無法清理問題分析

MemCgroup目錄無法清理問題分析: Cgroup(Control Group)是內(nèi)核提供的資源隔離的技術(shù),用于對Linux 系統(tǒng)中用戶態(tài)進(jìn)程使用的資源進(jìn)行隔離,核心思想是:把進(jìn)程分組,然后為進(jìn)程組分配資源(包括內(nèi)存、CPU、IO等)。其中Mem Cgroup用來隔離進(jìn)程組使用的內(nèi)存資源。 在H
推薦度:
導(dǎo)讀MemCgroup目錄無法清理問題分析: Cgroup(Control Group)是內(nèi)核提供的資源隔離的技術(shù),用于對Linux 系統(tǒng)中用戶態(tài)進(jìn)程使用的資源進(jìn)行隔離,核心思想是:把進(jìn)程分組,然后為進(jìn)程組分配資源(包括內(nèi)存、CPU、IO等)。其中Mem Cgroup用來隔離進(jìn)程組使用的內(nèi)存資源。 在H

? ? ? ? Cgroup(Control Group)是內(nèi)核提供的資源隔離的技術(shù),用于對Linux 系統(tǒng)中用戶態(tài)進(jìn)程使用的資源進(jìn)行隔離,核心思想是:把進(jìn)程分組,然后為進(jìn)程組分配資源(包括內(nèi)存、CPU、IO等)。其中Mem Cgroup用來隔離進(jìn)程組使用的內(nèi)存資源。 ? ? ? ? 在Hadoop集群

? ? ? ? Cgroup(Control Group)是內(nèi)核提供的資源隔離的技術(shù),用于對Linux 系統(tǒng)中用戶態(tài)進(jìn)程使用的資源進(jìn)行隔離,核心思想是:把進(jìn)程分組,然后為進(jìn)程組分配資源(包括內(nèi)存、CPU、IO等)。其中Mem Cgroup用來隔離進(jìn)程組使用的內(nèi)存資源。

? ? ? ? 在Hadoop集群中,我們使用了Mem Cgroup對MapReduce任務(wù)使用的內(nèi)存資源進(jìn)行隔離控制,以保證單個(gè)任務(wù)不能占用太大的內(nèi)存,進(jìn)而保證整個(gè)系統(tǒng)的穩(wěn)定性。同時(shí)我們配置了release_agent,用于在mem cgroup中的所有進(jìn)程退出后清理相關(guān)的資源。

? ? ? ? 但Mem Cgroup在Hadoop集群上線后,經(jīng)常會(huì)出現(xiàn)某個(gè)Mem Cgroup中的進(jìn)程已經(jīng)全部退出,但對應(yīng)的Cgroup目錄清理不掉的現(xiàn)象。查看Cgroup的狀態(tài),有如下現(xiàn)象:

? ? ? ? [root@]# cat /cgroup/memory/test/tasks

? ? ? ? [root@]# cat /cgroup/memory/test/memory.usage_in_bytes

? ? ? ? 90112

? ? ? ??該cgroup的所有進(jìn)程確實(shí)都已經(jīng)退出了,但還是存在部分內(nèi)存處于被使用狀態(tài),這是神馬情況,下意識地想到,難道是Page Cache,果斷驗(yàn)證下:

? ? ? ? echo 3 > /proc/sys/vm/drop_caches

? ? ? ? 刷掉Page Cache之后,殘留的cgroup目錄竟然成功被清理了,?那基本斷定是Page Cache的影響了,后面就得分析下代碼,研究下其中的原理了。

? ? ? ? 經(jīng)過幾天的分析,終于把Mem Cgroup的基本原理搞明白了。

? ? ? ? 在Linux內(nèi)核中,每個(gè)Mem Cgroup都對應(yīng)一個(gè)mem_cgroup結(jié)構(gòu),該結(jié)構(gòu)的的核心是res_counter,記錄了資源使用情況和資源限制,每個(gè)mem cgroup對象都包含一個(gè)與之關(guān)聯(lián)的res_counter。

? ? ? ? ?Linux內(nèi)核管理內(nèi)核的基本單位是頁面,采用page結(jié)構(gòu)管理,一個(gè)物理頁框?qū)?yīng)著一個(gè)page結(jié)構(gòu),與此同時(shí),新增了一個(gè)page_cgroup結(jié)構(gòu),用來關(guān)聯(lián)page和mem_cgroup,這樣給定任何一個(gè)頁面,都可以找到對應(yīng)的mem_cgroup。另外,每個(gè)進(jìn)程都有一個(gè)mm_struct結(jié)構(gòu)來管理進(jìn)程的內(nèi)存信息。每個(gè)mm_struct知道自己屬于的進(jìn)程,進(jìn)而可以知道進(jìn)程所屬的mem_cgroup。

??

? ? ? ? 用戶進(jìn)程物理內(nèi)存的分配基本都是通過page_fault來實(shí)現(xiàn),現(xiàn)在來看下這個(gè)過程中是如何實(shí)現(xiàn)mem cgroup相關(guān)功能的,page_fault的大體流程如下:

? ? ? ?1、? 根據(jù)current進(jìn)程找到對應(yīng)的mm_struct結(jié)構(gòu)

? ? ? ?2、? 分配需要的page頁面

? ? ? ?3、? 調(diào)用mem_cgroup_newpage_charge:該函數(shù)根據(jù)mm struct查找到對應(yīng)的mem_cgroup,然后? ? ? ??? ? ? ??? ? ? ? ? ? ? ??判斷下當(dāng)前mem_cgroup是否已經(jīng)超過限制,如果沒有,則把新分配page對應(yīng)page_cgroup指向該mem_cgroup,并更新資源使用計(jì)數(shù)。如果已經(jīng)超過了限制,則進(jìn)行oom相關(guān)的處理。

? ? ? ? 現(xiàn)在來考慮下Page cache,這些內(nèi)存是系統(tǒng)級的,可以被所有進(jìn)程使用,那這些內(nèi)存的使用算在哪個(gè)進(jìn)程的頭上呢?mem cgroup采用的是first touch的原則,就是說哪個(gè)進(jìn)程把page cache頁面“帶進(jìn)”內(nèi)存,這個(gè)頁面就算在誰的頭上。

? ? ? ? 大致了解了Mem cgroup的原理,回到一開始的問題,雖然mem cgroup中的進(jìn)程都已經(jīng)退出了,但是這些進(jìn)程使用的page cache仍然計(jì)算在這個(gè)mem cgroup中,導(dǎo)致mem cgroup一直被引用,因此mem cgroup清理不掉,刷掉page cache后,mem cgroup就沒有被引用了,也就可以清理了。

? ? ? ? 針對該問題,我們在內(nèi)核新增加了一個(gè)page cache的使用計(jì)算選擇:把page cache全部算入默認(rèn)的根mem cgroup。這樣做的另外一個(gè)好處是,mem cgroup只記錄進(jìn)程本身利用的物理內(nèi)存,更直觀可控。同時(shí)page cache是可回收的,如果某個(gè)mem cgroup中的進(jìn)程產(chǎn)生大量的page cache時(shí),其他mem cgroup進(jìn)程的內(nèi)存基本不受影響,可能的壞處是影響其他mem cgroup內(nèi)存分配的效率。

? ? ? ? 參考:http://lwn.net/Articles/432224/

你也許會(huì)喜歡:

  • hadoop集群System Cpu消耗過高問題分析 by 雜貨店店長
  • 性能測試中sql索引引起的性能問題
  • 從Blue Pill、硬件虛擬化談安全防護(hù)完備性上的一個(gè)小原則
  • 利用 Flash 漏洞的木馬程序分析報(bào)告 by 師兄
  • 端午節(jié)藍(lán)屏之謎:金山系列軟件同微軟KB2839229沖突技術(shù)分析
  • 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    MemCgroup目錄無法清理問題分析

    MemCgroup目錄無法清理問題分析: Cgroup(Control Group)是內(nèi)核提供的資源隔離的技術(shù),用于對Linux 系統(tǒng)中用戶態(tài)進(jìn)程使用的資源進(jìn)行隔離,核心思想是:把進(jìn)程分組,然后為進(jìn)程組分配資源(包括內(nèi)存、CPU、IO等)。其中Mem Cgroup用來隔離進(jìn)程組使用的內(nèi)存資源。 在H
    推薦度:
    標(biāo)簽: 刪除 清理 無法
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top