使用 cgroups 時將進程放入控制組有三種方法:
1 通過文件操作進行添加
echo [PID] > /path/to/cgroup/tasks
上述命令就是把進程ID打印到tasks中,如果tasks文件中已經(jīng)有進程,需要使用">>"向后添加。
通過cgclassify將進程添加到cgroup
2 cgclassify -g subsystems:path_to_cgroup pidlist
這個命令中贮配,subsystems指的就是子系統(tǒng)(如果使用man命令查看哈肖,可能也會使用controllers表示)???琅攘,如果mount了多個,就是用","隔開的子系統(tǒng)名字作為名稱,類似cgset命令坚嗜。
3 通過cgexec直接在cgroup中啟動并執(zhí)行進程
cgexec -g subsystems:path_to_cgroup command arguments
command和arguments就表示要在cgroup中執(zhí)行的命令和參數(shù)。cgexec常用于執(zhí)行臨時的任務诗充。
當控制 java 程序時苍蔬,前兩種方法都沒有效果,只能用第三種方法
使用的 pid 是 top 指令顯示出的 java 進程 pid
使用前兩種方法時只能在 cgroup 的 tasks 中寫入一個主線程的 pid
資源控制也沒有效果
而使用第三種方法時蝴蜓,可以把 jvm 運行的所有相關線程寫入 tasks碟绑,資源控制也生效了
環(huán)境 阿里云服務器 Centos7