Linux使用cgroup限制程序資源

之前一直在使用Docker來封裝並限制容器資源,從而實現限制進程資源的目的。但Linux Docker底層是基於cgroup來實現的,因而乎今天就想起來試試直接使用cgroup來限制進程資源。linux


下面就以要限制一個程序的內存爲例,來看看怎麼實現限制資源。對於其它的資源限制均可以使用相似方法。app


下面進入系統的 /sys/fs/cgroup 目錄下,看看咱們能夠限制哪些資源。在這個目錄下,基本上每一個目錄表明一類資源。這裏以memory資源爲例,memory目錄下包括下面這些文件ide


其中測試


帶 memsw 的表示虛擬內存,不帶 memsw 的表示物理內存;優化

memory.limit_in_bytes:是用來限制內存使用的;spa

memory.memsw.limit_in_bytes:內存+swap空間使用的總量限制,memory.memsw.limit_in_bytes 必須大於或等於 memory.limit_in_byte;.net

memory.oom_control:內存超限以後的 oom 行爲控制,0 爲開啓此功能;日誌

memory.use_hierarchy:當設爲 1 時,子控制組進程的內存佔用也會計入父控制組,並上溯到全部 memory.use_hierarchy = 1 的祖先控制組,默認爲 0;orm

下面就看看怎樣使用 cgroup 來限制進程內存。blog


首先在 /sys/fs/cgroup/memory 目錄下建立一個 mem_test 目錄,建立後會發下 mem_test 目錄下會默認建立牀不少文件,大多數和 /sys/fs/cgroup/memory 目錄下的文件相似。


# cd /sys/fs/cgroup/memory/

# mkdir mem_test

# cd mem_test

# echo 1024M > memory.limit_in_bytes

# echo 0 > memory.oom_control

# echo 1 > memory.use_hierarchy


而後運行測試程序,同時使用 ps 和 top 命令來監控程序執行,能夠發現當程序內存超過1G後,程序就會被 kill 掉。


# cgexec -g memory:mem_test ./mem.py 2GB

1

這裏咱們只使用了一種資源限制,若是要組合多種資源限制能夠使用相似以下的方法:


cgexec -g *:<name> <my_programe>


cgexec -g cpu,memory:<name> <my_programe>


cgexec -g cpu,memory:<name1> -g swap:<name2> <my_programe>


原文連接:https://blog.csdn.net/kongxx/article/details/98329891



日誌壓縮資源消耗優化: Linux CGroup 的使用   參考連接地址https://www.jianshu.com/p/7c9c1caa4397

參考連接https://blog.csdn.net/gaojy19881225/article/details/80019874


用cgroup限制內存以防止Linux因內存用盡卡死  參考連接https://blog.csdn.net/linuxxed/article/details/87883005

相關文章
相關標籤/搜索