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

恢复正常。