memory cgroup是cgroup的資源限制功能之一,可以控制特定程序可以使用的記憶體量。
memory cgroup
memory cgroup是cgroup(參考hack #7)之一,用來控制程序所使用的記憶體(lru管理的緩存)數量。
其用法有很多種,例如,可以用來避免因一時處理較大檔案或大量檔案,而導緻無用的頁面緩存增大,記憶體資源緊張的情況。另外,還可以在多使用者環境中限制各使用者可以使用的記憶體量。
用法
memory cgroup是cgroup的一種,是以使用前必須挂載cgroup檔案系統。啟用memory cgroup時,可以為挂載指令指定memory選項,也可以不指定選項以啟用cgroup的所有功能。
本節使用下列方式挂載到/cgroup。
挂載cgroup後,通過在/cgroup下建立新目錄來建立新的分組。memory cgroup可以通過對該目錄下的檔案設定參數,來控制記憶體使用量。
另外,能否通過cgroup檔案系統控制以及特殊檔案的種類多少,會根據核心版本和核心config的不同有所差異。
cgroup檔案系統中關于memory cgroup配置的主要特殊檔案如表2-3所示。
表2-3 關于memory cgroup的主要檔案
限制記憶體使用量
記憶體使用量可以使用memory.limit_in_bytes進行限制。這裡建立一個名稱為groupa的分組,嘗試将記憶體使用量限制為10mb。可以通過如下指令行實作。
下面看一下memory cgroup限制記憶體使用量的效果。
1.擷取較大的檔案
首先,看一下不對記憶體使用量進行限制時的結果。
從free來看,原本有約600mb的空閑記憶體減少到約60mb。而cached的值大幅增加,可以看出對wget指令擷取的約700mb的檔案進行緩存時使用了空閑記憶體。
下面看一下将記憶體使用量限制為10mb時的結果。
從free指令中cached的差别可以看出記憶體使用量限制在約10mb。
2.備份處理
在通過tar指令建立資料庫時也可以使用。以linux核心源代碼資料庫為例進行說明。
不限制記憶體使用量時:
記憶體使用量限制為10mb時:
可以發現記憶體同樣限制為10mb。
層次結構
通過memory cgroup控制的分組可以采用層次結構。可以在memory.use_hierarchy中寫入1,啟用分組的層次結構。
例如,通過執行下列指令審校者注1,可以建立如圖2-1所示的分組結構。
圖2-1 建立的分組結構
顯示統計資訊
關于各分組記憶體使用量的統計資訊可以從memory.stat檔案中讀取(見表2-4)。
表2-4 記憶體使用量的統計資訊
下列内容在使用層次結構時有效,将顯示層次結構中處于上層的分組所限制的值(見表2-5)。
表2-5 使用層次結構時的分組限制值
表2-6所示為層次結構中分組的合計,在本分組下建立的所有分組的合計值。
表2-6 層次結構中分組下的合計值
小結
本節介紹了memory cgroup。使用memory cgroup設定記憶體使用量的上限,就可以避免産生多餘的頁面緩存,減少對其他處理的影響。
參考文獻
documentation/cgroup/memory.txt
—hiroshi shimamoto