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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











많은 win10 사용자는 C 드라이브에서 hiberfil.sys 파일을 볼 수 있으며, 이 파일은 시스템의 C 드라이브의 많은 양을 차지하는 경우가 많습니다. 따라서 C 드라이브가 부족한 많은 사용자는 이 파일을 삭제하기를 원합니다. 자세한 내용은 아래를 참조하세요. 1. 최대 절전 모드 파일을 확인하고 팝업 창에서 다음 표시 앞의 확인 표시를 제거합니다. 2. c 드라이브를 다시 확인하고 여러 개의 대용량 파일을 찾으십시오. 그중 hiberfil.sys가 최대 절전 모드 파일입니다. 여기에서 cmd 명령 창을 엽니다. 일부 컴퓨터에는 관리자 권한이 없을 수 있습니다. 시스템 디렉터리에서 직접 cmd 명령을 찾아 마우스 오른쪽 버튼을 클릭하여 관리자 권한으로 실행할 수 있습니다. 3. 명령 창에 powercfg-hoff를 입력하면 최대 절전 모드 기능이 자동으로 꺼지고, 최대 절전 모드 파일도 자동으로 꺼집니다.

WeChat 독서 앱의 모바일 버전은 매우 좋은 독서 소프트웨어입니다. 이 소프트웨어는 원클릭 검색으로 언제 어디서나 읽을 수 있으며 모두 공식적으로 승인된 다양한 유형의 책입니다. 책이 가지런히 정리되어 있어 편안하고 여유로운 독서 분위기를 즐기실 수 있습니다. 다양한 시나리오의 읽기 모드를 전환하고, 최신 도서 장을 매일 지속적으로 업데이트하고, 여러 장치에서 온라인 로그인을 지원하고, 인터넷 유무에 관계없이 책장에 일괄 다운로드하여 모든 사람이 더 많은 지식을 발견할 수 있습니다. 이제 편집자가 온라인으로 자세히 설명합니다. WeChat 독서 파트너에게 카탈로그를 보는 방법을 홍보하십시오. 1. 카탈로그를 보고 싶은 책을 열고 책 중앙을 클릭하세요. 2. 왼쪽 하단에 있는 세 줄 아이콘을 클릭하세요. 3. 팝업창에서 도서 카탈로그를 확인하세요.

제목: DreamWeaver CMS의 보조 디렉터리를 열 수 없는 이유와 해결 방법 분석 Dreamweaver CMS(DedeCMS)는 다양한 웹 사이트 구축에 널리 사용되는 강력한 오픈 소스 콘텐츠 관리 시스템입니다. 그러나 때로는 웹사이트를 구축하는 과정에서 보조 디렉토리를 열 수 없는 상황이 발생할 수 있으며, 이로 인해 웹사이트의 정상적인 작동에 문제가 발생할 수 있습니다. 이 기사에서는 보조 디렉터리를 열 수 없는 가능한 이유를 분석하고 이 문제를 해결하기 위한 구체적인 코드 예제를 제공합니다. 1. 예상 원인 분석: 의사 정적 규칙 구성 문제: 사용 중

tree는 디렉터리의 내용을 트리 형식으로 반복적으로 나열하여 모든 디렉터리, 하위 디렉터리 및 파일을 계층적으로 나열함으로써 파일과 폴더의 조직 구조를 시각적으로 표시하는 명령줄 도구입니다. 다음은 Windows 및 Linux 시스템에서의 tree 설치 및 사용 방법입니다. Linux에서의 tree 설치 및 사용: aptupdate&&aptinstalltree 다음은 tree 명령을 사용하는 일반적인 방법입니다. #지정된 경로 아래에 디렉터리 트리 표시 tree/d/temp #최대 표시 깊이 제한 tree-L3 #디렉토리만 표시하고 파일은 표시하지 않음 tree-d #숨겨진 파일 및 디렉터리 포함 표시 tr

제목: Tencent의 주요 프로그래밍 언어는 Go: 심층 분석 중국 최고의 기술 회사로서 Tencent는 프로그래밍 언어 선택에 있어 항상 많은 관심을 받아 왔습니다. 최근 몇 년 동안 일부 사람들은 Tencent가 주로 Go를 주요 프로그래밍 언어로 채택했다고 믿고 있습니다. 이 기사에서는 Tencent의 주요 프로그래밍 언어가 Go인지에 대한 심층 분석을 수행하고 이러한 관점을 뒷받침하는 구체적인 코드 예제를 제공합니다. 1. Tencent에 Go 언어 적용 Go는 Google에서 개발한 오픈 소스 프로그래밍 언어로 효율성, 동시성 및 단순성으로 인해 많은 개발자에게 사랑을 받고 있습니다.

사운드 카드 드라이버는 사운드 카드를 제어하고 지시하는 컴퓨터의 시스템 프로그램으로 사운드 재생에 도움을 줄 수 있습니다. 따라서 사운드 카드 드라이버에 문제가 있는 경우 가장 직관적인 상황은 사운드 측면에서 소리가 나지 않거나 소리가 불규칙하게 진동하고 비정상적으로 정지됩니다. 사운드 카드 드라이버에 문제가 있는 경우 어떻게 됩니까? 1. 사운드 오류 1. 사운드 카드 드라이버가 사운드를 제공하므로 가장 직관적인 문제는 사운드 문제입니다. 2. 컴퓨터에서 소리가 나지 않거나, 소리가 멈추거나, 지연되거나, 시끄럽거나, 볼륨 톤이 비정상적인 경우, 사운드 카드 드라이버와 관련된 것일 수 있습니다. 3. 비슷한 문제가 발생하면 사운드 카드 드라이버를 다시 설치하거나 업데이트해 볼 수 있습니다. 2. 장치 관리자의 느낌표 1. 소리에 문제가 없다면 대부분 사운드 카드 드라이버가 정상이라는 뜻입니다. 2. 하지만 나는

Wuhua Mixin은 2월 28일에 브레이킹 테스트를 실시할 것이라고 확인했습니다. 이번에는 이전 테스트에 참여한 적이 있는지, 이번에 자격이 있는지, 시작과 끝이 무엇인지 등 브레이킹 테스트의 일반적인 문제를 주로 해결할 것입니다. 테스트, 사전 다운로드 시간은 무엇인지, 지원되는 기기 플랫폼과 기타 콘텐츠를 살펴보겠습니다. Wuhuami의 새로운 획기적인 테스트에 대해 자주 묻는 질문: 2월 28일, 여러분의 도착을 기대합니다! 1. "브레이킹 테스트"의 성격은 무엇입니까? 이 테스트는 Android에 대한 제한된 과금 및 파일 삭제 테스트입니다. 테스트 후에는 이 테스트의 게임 데이터가 삭제됩니다. 2. "오프닝 테스트" 또는 "입문 테스트"에 참가한 적이 있습니까? 이번에 "오프닝 테스트" 또는 "입문 테스트"에 참가할 수 있는 자격이 있습니까? 아래 QR코드를 스캔하여 " 클로즈베타에 참여해주신 플레이어분들께"로 이동해주세요.

생체 휴대폰을 사용할 때 메모리 부족 문제가 자주 발생한다면 이제 휴대폰의 메모리를 정리하고 공간을 확보하는 방법을 배워야 할 때입니다. 이 가이드에서는 생체 휴대폰의 메모리 사용량을 최적화하고 보다 원활하게 실행하는 데 도움이 되는 몇 가지 간단하고 효과적인 방법을 소개합니다. 1. 캐시 파일 지우기 캐시 파일은 휴대폰 메모리의 많은 부분을 차지합니다. 캐시를 지우면 휴대폰 성능이 크게 향상될 수 있습니다. 먼저 휴대폰의 설정 메뉴를 열고 "저장소" 옵션에서 "캐시 데이터" 또는 "캐시 지우기" 옵션을 찾아 클릭하여 들어갑니다. 그런 다음 캐시 지우기를 선택하고 정리가 완료될 때까지 기다립니다. 2. 불필요한 앱 제거 다양한 앱을 다운로드받고 실제로는 그 중 일부만 사용하는 경우가 많으신가요? 이러한 버려진 애플리케이션은 많은 시간을 차지합니다.
