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ヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









多くの win10 ユーザーは C ドライブに hiberfil.sys ファイルを表示できますが、このファイルはシステムの C ドライブの大部分を占有していることが多いため、十分な C ドライブがない多くのユーザーはこのファイルを削除したいと考えています。詳細は下記にて。 1. 休止状態ファイルを表示し、ポップアップ ウィンドウで次のマークの前のチェック マークを外します。 2. C ドライブを再度チェックして、いくつかの大きなファイルを見つけます。その中には、hiberfil.sys という休止状態ファイルがあります。ここで cmd コマンド ウィンドウを開きます。一部のコンピュータには管理者権限がない場合があります。システム ディレクトリで cmd コマンドを直接見つけ、右クリックして管理者として実行できます。 3. コマンド ウィンドウに powercfg-hoff と入力すると、休止状態機能が自動的にオフになり、休止状態ファイルも自動的にオフになります。

WeChat Reading App のモバイル版は非常に優れた読書ソフトウェアです。このソフトウェアにはたくさんの書籍や作品が含まれています。ワンクリックでオンラインで検索して読むだけでいつでもどこでも読むことができます。すべて公式に認可されており、異なります。本の種類もきれいに並べられており、ゆっくりと本を読みながら快適に読書を楽しむことができます。さまざまなシナリオの読書モードを切り替え、書籍の最新章を毎日継続的に更新し、複数のデバイスからのオンライン ログインをサポートし、本棚への一括ダウンロードをサポートします。インターネットの有無にかかわらず読むことができるため、誰もがそこからより多くの知識を発見できます編集者がオンラインで詳細を説明 WeChat 読書パートナー向けにカタログの閲覧方法を宣伝します。 1. カタログを表示したい本を開き、本の中央をクリックします。 2. 左下隅にある三本線のアイコンをクリックします。 3. ポップアップ ウィンドウで書籍カタログを表示します。

タイトル: DreamWeaver CMS のセカンダリディレクトリを開けない原因と解決策の分析 Dreamweaver CMS (DedeCMS) は、さまざまな Web サイトの構築に広く使用されている強力なオープンソースのコンテンツ管理システムです。ただし、Web サイトの構築中に、セカンダリ ディレクトリを開けない状況が発生し、Web サイトの通常の動作に問題が発生することがあります。この記事では、セカンダリ ディレクトリを開けない考えられる理由を分析し、この問題を解決するための具体的なコード例を示します。 1. 考えられる原因分析: 疑似静的ルール構成の問題: 使用中

Tree は、ディレクトリの内容をツリー形式で再帰的にリストするコマンド ライン ツールです。これにより、すべてのディレクトリ、サブディレクトリ、およびファイルが階層形式でリストされ、それによってファイルとフォルダの組織構造が視覚的に表示されます。 Windows および Linux システムでの Tree のインストールと使用方法 Linux での Tree のインストールと使用 Linux での Tree のインストール: aptupdate&&aptinstalltree 以下は、tree コマンドの一般的な使用方法です。 #指定したパスの下のディレクトリ ツリーを表示しますtree/d/temp#最大表示深度を制限しますtree-L3#ディレクトリのみを表示し、ファイルは表示しませんtree-d#隠しファイルとディレクトリを含めて表示しますtr

タイトル: テンセントの主要なプログラミング言語は Go ですか: 詳細な分析 中国の大手テクノロジー企業として、テンセントはプログラミング言語の選択において常に多くの注目を集めてきました。近年、テンセントは主に Go を主要なプログラミング言語として採用していると考える人もいます。この記事では、Tencent の主要なプログラミング言語が Go であるかどうかについて詳細な分析を行い、この見解を裏付ける具体的なコード例を示します。 1. Tencent における Go 言語の適用 Go は、Google によって開発されたオープンソースのプログラミング言語であり、その効率性、同時実行性、シンプルさにより多くの開発者に愛されています。

サウンド カード ドライバーは、サウンド カードを制御および指示するコンピューター内のシステム プログラムです。サウンドの再生に役立ちます。したがって、サウンド カード ドライバーに問題がある場合、サウンドに関して最も直観的な状況は次のとおりです。音が出なくなったり、音が変動したり異常フリーズしたりします。サウンド カード ドライバーに問題がある場合はどうなりますか: 1. サウンド エラー 1. サウンド カード ドライバーはサウンドを提供するため、最も直感的な問題はサウンドの問題です。 2. コンピューターから音が出ない、音が途切れる、遅延する、ノイズが多い、または音量トーンが異常である場合は、サウンド カード ドライバーに関連している可能性があります。 3. したがって、同様の問題が発生した場合は、サウンド カード ドライバーの再インストールまたは更新を試みることができます。 2. デバイスマネージャーの感嘆符 1. サウンドに問題がない場合は、ほとんどの場合、サウンド カード ドライバーが正常であることを意味します。 2. でも私は

Vivo 電話の使用中にメモリ不足の問題が頻繁に発生する場合は、今こそ電話のメモリをクリーンアップして領域を解放する方法を学びましょう。このガイドでは、vivo 電話のメモリ使用量を最適化し、よりスムーズに動作させるための簡単で効果的な方法をいくつか紹介します。 1. キャッシュ ファイルをクリアします。キャッシュ ファイルは電話機のメモリの大部分を占めています。キャッシュをクリアすると、電話機のパフォーマンスが大幅に向上します。まず、携帯電話の設定メニューを開き、「ストレージ」オプションで「データのキャッシュ」または「キャッシュのクリア」オプションを見つけ、クリックして入力します。次に、[キャッシュのクリア] を選択し、クリーンアップが完了するまで待ちます。 2. 不要なアプリをアンインストールする さまざまなアプリをダウンロードしても、実際に使用するのは一部だけということがよくありますか?これらの放棄されたアプリは多くの時間を消費します

Wuhua Mixin は、2 月 28 日に突破テストを実施することを確認しました。今回は、過去のテストに参加したことがあるか、今回は資格があるのか、テストの開始と終了など、突破テストの一般的な問題を主に解決します。テストと事前ダウンロード時間は? サポートされているデバイス プラットフォームとその他のコンテンツを見てみましょう。 Wuhuami の新しいブレークスルー テストに関するよくある質問: 2 月 28 日、皆様のご来場をお待ちしております。 1.「破壊テスト」とは何ですか? このテストはAndroid向けの限定課金およびファイル削除テストであり、テスト終了後は本テストのゲームデータは削除されます。 2. 「オープニングテスト」または「エントリーテスト」に参加したことがありますか? 今回の「ブレイクテスト」に参加する資格はありますか? 「オープニングテスト」または「エントリーテスト」に参加したことがある方は、下記のQRコードを読み取って「クローズドベータにご参加いただいた方へ」へお進みください。
