深入理解容器:控制组与命名空间解析
1. 控制组(Cgroups)基础
控制组(Cgroups)是 Linux 内核的一个特性,用于限制和隔离一组进程对系统资源(如 CPU、内存、磁盘 I/O 等)的使用。通过修改 cgroup 文件系统中的文件,可以对特定类型的资源进行操作。
例如,将进程 ID 为 29903 的进程添加到名为 liz
的内存控制组中,并设置其内存限制:
root@vagrant:/sys/fs/cgroup/memory/liz$ echo 29903 > cgroup.procs
root@vagrant:/sys/fs/cgroup/memory/liz$ cat cgroup.procs
29903
root@vagrant:/sys/fs/cgroup/memory/liz$ cat /proc/29903/cgroup | grep memory
8:memory:/liz
当该进程尝试使用超过 100kB 的内存时,会被系统杀死:
$ ls
Killed
2. Docker 中的 Cgroups
Docker 自动为每种类型的资源创建自己的控制组。可以通过查看 cgroups 层次结构中名为 docker
的目录来查看这些控制组:
root@vagrant:/sys/fs/