该文档已作废。新文档见 cgroups: 入门指引、基本概念和 cgroup v1 基础使用
cgroup-v1 和 cgroup-v2 有很详细的介绍。
To mount a cgroup hierarchy with all available subsystems
cgroup 有多个 subsystem,通过下面的命令可以挂载所有的 subsystem:
mount -t cgroup xxx /sys/fs/cgroup
xxx可以是任意字符,CentOS默认为tmpfs,例如:
$df |grep cgroup
tmpfs 1940928 0 1940928 0% /sys/fs/cgroup
/sys/fs/cgroup/目录下就是所有可用的subsystem:
$ls /sys/fs/cgroup/
blkio cpu cpuacct cpu,cpuacct cpuset devices freezer hugetlb
memory net_cls net_cls,net_prio net_prio perf_event pids systemd
不同的subsystem有不同的用法。
可以在每个subsystem目录下建立多个目录,每个目录就是一个cgroup,可以分别设置每个cgroup。
cgroup中可以继续创建cgroup。
将进程号写入对应的一个cgroup目录的task文件中,即将进程纳入了对应的cgroup。
纠错:写入task文件的是线程号,并且只有cgroup v1支持task文件,进程号应该写入接口文件cgroup.procs
,见cgroups v1:cgroup的创建和进程绑定。@2019-02-18 11:45:26
将进程号写入另一个cgroup的task或者cgroup.procs文件后,自动将其从原先的cgroup的移除。
cgroup.procs会将同一个threadgroup中所有的进程都关联到cgroup。
pids用来限制一个进程可以派生出的进程数量。
如果系统中没有挂载pids,先挂载:
mkdir -p /sys/fs/cgroup/pids
mount -t cgroup -o pids none /sys/fs/cgroup/pids
然后创建一个名为parent的目录,也就是一个cgroup:
mkdir -p /sys/fs/cgroup/pids/parent
设置最大进程数为3:
echo 3 > /sys/fs/cgroup/pids/parent/pids.max
将当前的shell进程关联到cgroup:
echo $$ > /sys/fs/cgroup/pids/parent/cgroup.procs