之前一直在使用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