我有一个 Debian squeeze 内核 (linux-image-2.6.32-5-openvz-amd64),根据 Doku 的说法,它应该支持 cgroups。当我查看内核配置时,它确实支持 (还是需要其他内核配置?)
# zgrep -i cgroup /boot/config-2.6.32-5-openvz-amd64
# CONFIG_CGROUP_SCHED is not set
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_DEVICE=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NET_CLS_CGROUP=y
此外,根据http://wiki.debian.org/LXC,可能需要一个内核参数 cgroup_enable=memory。我用它来启动内核:
# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.32-5-openvz-amd64 root=UUID=6332fe39-7eaa-4519-b6c1-e05808284586 ro cgroup_enable=memory quiet console=ttyS0,57600n8
但是,系统仍然不支持 cgroup!无法挂载 cgroup 文件系统,因为系统甚至不知道文件系统类型:
# mount -t cgroup none /cgroup
mount: unknown filesystem type 'cgroup'
和:
# grep -i cgroup /proc/filesystems
#
所以要么是存在错误,要么是我遗漏了什么。有人能告诉我是什么吗?缺少内核参数吗?缺少内核配置吗?
答案1
您必须传递 -o 来告诉它要挂载什么。
mount -t cgroup -o memory cgroup_memory /sys/fs/cgroup/memory
并且假设 /sys/fs/cgroup 已经挂载。
mount -t tmpfs cgroup /sys/fs/cgroup
Ubuntu 有一个名为cgroup-精简版它可以在启动时完成所有这些操作。Debian 中似乎没有这个功能,所以我不确定等效功能是什么。
注意:我无法添加评论,因此我只能这样回答您的问题。例如:我想问您是否检查过内核日志(dmesg | grep cgroup)。
答案2
答案3
这取决于您的发行版和内核版本。您可以使用 Docker 中的以下脚本来测试cgroups
和容器相关的功能:
wget https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh -O cgroups_check && chmod +x cgroups_check
./cgroups_check