首頁 資料庫 mysql教程 Mem Cgroup目录无法清理问题分析

Mem Cgroup目录无法清理问题分析

Jun 07, 2016 pm 04:30 PM
mem 分析 清理 目錄 問題

? ? ? ? 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冲突技术分析
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

win10清理刪除hiberfil檔案教學介紹 win10清理刪除hiberfil檔案教學介紹 Mar 28, 2024 pm 03:16 PM

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

微信讀書怎麼看目錄 看目錄的方法 微信讀書怎麼看目錄 看目錄的方法 Mar 30, 2024 pm 05:56 PM

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

織夢CMS二級目錄打不開的原因分析 織夢CMS二級目錄打不開的原因分析 Mar 13, 2024 pm 06:24 PM

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

使用tree生成檔案目錄樹進行展示 使用tree生成檔案目錄樹進行展示 Mar 01, 2024 pm 05:46 PM

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

如何清理vivo手機記憶體不足問題,快速釋放空間? 如何清理vivo手機記憶體不足問題,快速釋放空間? Mar 03, 2024 am 09:28 AM

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

分析騰訊主要的程式語言是否為Go 分析騰訊主要的程式語言是否為Go Mar 27, 2024 pm 04:21 PM

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

物華彌新破局測試常見問題:2月28日,我們期待您的到來! 物華彌新破局測試常見問題:2月28日,我們期待您的到來! Feb 26, 2024 pm 05:22 PM

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

PHP實作URL位址路徑後綴清理技巧 PHP實作URL位址路徑後綴清理技巧 Mar 24, 2024 pm 05:48 PM

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

See all articles