linux cgroup 无法彻底卸载问题一例
用mount -t cgroup -o cpu,memory my_virt_res /cgroup/my_cpu_and_mem 挂载cgroup文件系统后, 使用
cgcreate -g cpu:/my_cpu 创建控制组到/cgroup/my_cpu_and_mem/my_cpu下,
然后一个误操作将/cgroups/my_cpu_and_mem 上的文件系统卸载掉了: umount /cgroup/my_cpu_and_mem
此时,/proc/mounts 已经看不到cgroup文件系统了, 但/proc/cgroups里还有subsys位于层级中, lssubsys -i 也能看到:
cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 0 1 1
ns 0 1 1
cpu 30 2 1
cpuacct 0 1 1
memory 30 2 1
devices 0 1 1
freezer 0 1 1
net_cls 0 1 1
blkio 0 1 1
perf_event 0 1 1
net_prio 0 1 1
试图挂载仅包含cpu或memory的cgroup都失败,报错device busy
解决方法:将cpu,memory作为整体重新挂载cgroup文件系统,最后执行cgclear即可彻底卸载cgroup.
mount -t cgroup -o cpu,memory my_virt_res /cgroup/my_cpu_and_mem
# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=99188k,nr_inodes=24797,mode=755 0 0
......
my_virt_res /cgroup/my_cpu_and_mem cgroup rw,relatime,memory,cpu 0 0
# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 0 1 1
ns 0 1 1
cpu 47 1 1
cpuacct 0 1 1
memory 47 1 1
devices 0 1 1
freezer 0 1 1
net_cls 0 1 1
blkio 0 1 1
perf_event 0 1 1
net_prio 0 1 1
# cgclear
# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 0 1 1
ns 0 1 1
cpu 0 1 1
cpuacct 0 1 1
memory 0 1 1
devices 0 1 1
freezer 0 1 1
net_cls 0 1 1
blkio 0 1 1
perf_event 0 1 1
net_prio 0 1 1
恢复正常。