Mem Cgroup目录无法清理问题分析
? ? ? ? Cgroup(Control Group)是内核提供的资源隔离的技术,用于对Linux 系统中用户态进程使用的资源进行隔离,核心思想是:把进程分组,然后为进程组分配资源(包括内存、CPU、IO等)。其中Mem Cgroup用来隔离进程组使用的内存资源。 ? ? ? ? 在Hadoop集群
? ? ? ? Cgroup(Control Group)是内核提供的资源隔离的技术,用于对Linux 系统中用户态进程使用的资源进行隔离,核心思想是:把进程分组,然后为进程组分配资源(包括内存、CPU、IO等)。其中Mem Cgroup用来隔离进程组使用的内存资源。
? ? ? ? 在Hadoop集群中,我们使用了Mem Cgroup对MapReduce任务使用的内存资源进行隔离控制,以保证单个任务不能占用太大的内存,进而保证整个系统的稳定性。同时我们配置了release_agent,用于在mem cgroup中的所有进程退出后清理相关的资源。
? ? ? ? 但Mem Cgroup在Hadoop集群上线后,经常会出现某个Mem Cgroup中的进程已经全部退出,但对应的Cgroup目录清理不掉的现象。查看Cgroup的状态,有如下现象:
? ? ? ? [root@]# cat /cgroup/memory/test/tasks
? ? ? ? [root@]# cat /cgroup/memory/test/memory.usage_in_bytes
? ? ? ? 90112
? ? ? ??该cgroup的所有进程确实都已经退出了,但还是存在部分内存处于被使用状态,这是神马情况,下意识地想到,难道是Page Cache,果断验证下:
? ? ? ? echo 3 > /proc/sys/vm/drop_caches
? ? ? ? 刷掉Page Cache之后,残留的cgroup目录竟然成功被清理了,?那基本断定是Page Cache的影响了,后面就得分析下代码,研究下其中的原理了。
? ? ? ? 经过几天的分析,终于把Mem Cgroup的基本原理搞明白了。
? ? ? ? 在Linux内核中,每个Mem Cgroup都对应一个mem_cgroup结构,该结构的的核心是res_counter,记录了资源使用情况和资源限制,每个mem cgroup对象都包含一个与之关联的res_counter。
? ? ? ? ?Linux内核管理内核的基本单位是页面,采用page结构管理,一个物理页框对应着一个page结构,与此同时,新增了一个page_cgroup结构,用来关联page和mem_cgroup,这样给定任何一个页面,都可以找到对应的mem_cgroup。另外,每个进程都有一个mm_struct结构来管理进程的内存信息。每个mm_struct知道自己属于的进程,进而可以知道进程所属的mem_cgroup。
??
? ? ? ? 用户进程物理内存的分配基本都是通过page_fault来实现,现在来看下这个过程中是如何实现mem cgroup相关功能的,page_fault的大体流程如下:
? ? ? ?1、? 根据current进程找到对应的mm_struct结构
? ? ? ?2、? 分配需要的page页面
? ? ? ?3、? 调用mem_cgroup_newpage_charge:该函数根据mm struct查找到对应的mem_cgroup,然后? ? ? ??? ? ? ??? ? ? ? ? ? ? ??判断下当前mem_cgroup是否已经超过限制,如果没有,则把新分配page对应page_cgroup指向该mem_cgroup,并更新资源使用计数。如果已经超过了限制,则进行oom相关的处理。
? ? ? ? 现在来考虑下Page cache,这些内存是系统级的,可以被所有进程使用,那这些内存的使用算在哪个进程的头上呢?mem cgroup采用的是first touch的原则,就是说哪个进程把page cache页面“带进”内存,这个页面就算在谁的头上。
? ? ? ? 大致了解了Mem cgroup的原理,回到一开始的问题,虽然mem cgroup中的进程都已经退出了,但是这些进程使用的page cache仍然计算在这个mem cgroup中,导致mem cgroup一直被引用,因此mem cgroup清理不掉,刷掉page cache后,mem cgroup就没有被引用了,也就可以清理了。
? ? ? ? 针对该问题,我们在内核新增加了一个page cache的使用计算选择:把page cache全部算入默认的根mem cgroup。这样做的另外一个好处是,mem cgroup只记录进程本身利用的物理内存,更直观可控。同时page cache是可回收的,如果某个mem cgroup中的进程产生大量的page cache时,其他mem cgroup进程的内存基本不受影响,可能的坏处是影响其他mem cgroup内存分配的效率。
? ? ? ? 参考:http://lwn.net/Articles/432224/
你也许会喜欢:
- hadoop集群System Cpu消耗过高问题分析 by 杂货店店长
- 性能测试中sql索引引起的性能问题
- 从Blue Pill、硬件虚拟化谈安全防护完备性上的一个小原则
- 利用 Flash 漏洞的木马程序分析报告 by 师兄
- 端午节蓝屏之谜:金山系列软件同微软KB2839229冲突技术分析

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

有不少win10用戶可以在c盤當中看到hiberfil.sys這個文件,而且該文件經常佔用了系統大量c盤,因此不少c盤不夠的用戶們就想要刪除該文件,詳細請看下文介紹。 1.查看休眠文件,在彈出的視窗中去掉以下標記的前面的對號。 2.再次查看c盤下面發現多了好幾個大文件,其中hiberfil.sys就是休眠文件。這裡打開cmd指令窗口,有的電腦可能沒有管理員權限可以直接在系統目錄中找到cmd指令,右鍵以管理員身分執行。 3.在指令視窗中輸入powercfg-hoff就會自動關閉休眠功能,休眠檔案也會自動

微信讀書app手機版是一款非常不錯的閱讀軟體,這款軟體內提供的書籍作品非常多,隨時隨地想看就看一鍵搜尋線上閱讀,且都是官方正版授權的,不同類型的書籍整齊排序,享受舒適輕鬆的閱讀氣氛。切換不同情景的閱讀模式,每天不間斷更新最新的書籍章節,支持多端設備在線登錄,批量下載到書架上,有無網絡情況下一樣能看,讓大家從中發現更多知識,現在小編在線詳細為微信讀書夥伴們推送查看目錄的方法。 1.打開需要查看目錄的書籍,點擊書籍中間位置。 2.點選左下方的三條線圖示。 3.在彈出的視窗中,查看書籍目錄即

標題:解析織夢CMS二級目錄打不開的原因及解決方案織夢CMS(DedeCMS)是一款功能強大的開源內容管理系統,被廣泛應用於各類網站建設中。然而,有時在搭建網站過程中可能會遇到二級目錄無法開啟的情況,這給網站的正常運作帶來了困擾。在本文中,我們將分析二級目錄打不開的可能原因,並提供具體的程式碼範例來解決這個問題。一、可能的原因分析:偽靜態規則配置問題:在使用

tree是一個命令列工具,它以樹狀格式遞歸地列出一個目錄的內容,使得所有的目錄、子目錄和文件以分層的方式列出,從而直觀地展示文件和資料夾的組織結構。以下是tree在Windows和Linux系統下的安裝與使用方法Linux下tree的安裝與使用Linux下安裝tree:aptupdate&&aptinstalltree以下是tree指令的常用方式。 #顯示指定路徑下的目錄樹tree/d/temp#限制最大的展示深度tree-L3#只顯示目錄不顯示檔案tree-d#顯示包含隱藏的檔案和目錄tr

如果你使用vivo手机时频繁遇到内存不足的问题,那么现在是时候学习如何清理手机内存并释放空间了。本指南将向你介绍一些简单而有效的方法,帮助你优化vivo手机的内存使用,使其运行更加流畅。1.清理缓存文件缓存文件占据了手机内存的很大一部分空间,清理缓存能够显著提升手机的性能。首先,打开手机的设置菜单,在“存储”选项中找到“缓存数据”或“清理缓存”选项,点击进入。然后,选择清除缓存,等待清理完成。2.卸载不必要的应用程序你是否经常下载各种应用程序,但实际上只使用其中的几个?这些废弃的应用程序会占用大

標題:騰訊主要的程式語言是否為Go:一項深入分析騰訊作為中國領先的科技公司,在程式語言的選擇上一直備受關注。近年來,有人認為騰訊主要採用Go作為主要的程式語言。本文將對騰訊主要的程式語言是否為Go進行深入分析,並給出具體的程式碼範例來支持這一觀點。一、Go語言在騰訊的應用Go是一種由Google開發的開源程式語言,它的高效性、並發性和簡潔性受到眾多開發者的喜

物華彌新已確定將於2月28日進行破局測試,本次主要為大家解決破局測試的常見問題,包括曾經參與過之前的測試這次有資格嗎、測試的開啟和結束、預下載時間、支援哪些設備平台等內容,一起來看看吧。物華彌新破局測試常見問題:2月28日,我們期待您的到來! 1.「破局測試」的性質為?本次測試為安卓限量計費刪除測試,測試結束後,本次測試的遊戲資料將被刪除。 2、曾經參與過「開局測試」或「入局測試」,這次擁有參與「破局測試]的資格嗎?如您曾參與過「開局測試」、「入局測試」,請掃描下方二維碼前往「致曾參與內測玩家

PHP實作URL位址路徑後綴清理技巧在Web開發過程中,URL位址路徑後綴的清理是一個非常重要的步驟。清理URL位址路徑後綴可以提高網站的SEO優化,提升使用者體驗,同時也有利於網站安全性。在PHP開發中,如何實現URL位址路徑後綴的清理呢?以下將介紹一些實用的技巧和具體的程式碼範例。一、基本概念在URL中,地址路徑後綴通常指的是URL中的文件類型或標識符,例
