Linux 系统资源管理工具 cgroups:限制和管理系统资源
cgroups 是 Linux 内核的一个功能,它允许你限制、管理和监控进程对系统资源(如 CPU、内存、磁盘 I/O 等)的访问。cgroups 对于系统管理员来说是一个非常有用的工具,可以帮助他们确保系统资源的合理分配,避免进程之间的资源竞争,并提高系统的整体性能和稳定性。
1. cgroups 简介
cgroups(Control Groups)是 Linux 内核的一个功能,它允许你将进程组织成层次结构,并为每个层次结构分配不同的资源限制。cgroups 提供了对以下系统资源的控制:
- CPU
- 内存
- 磁盘 I/O
- 网络带宽
- 设备访问
cgroups 的主要组件包括:
- cgroup 命名空间:一个用于组织进程的层次结构。
- cgroup 根目录:一个包含所有 cgroup 层次结构的目录。
- cgroup 文件系统:一个用于挂载 cgroup 命名空间的文件系统。
- cgroup 控制器:用于限制和管理进程对系统资源的访问。
2. 在 Ubuntu 和 CentOS 上安装 cgroups
cgroups 功能在 Ubuntu 和 CentOS 的默认内核中已经启用。因此,你不需要安装任何额外的软件包。
3. 创建和管理 cgroups
3.1 创建 cgroup
你可以使用 cgcreate
命令创建一个新的 cgroup。例如,创建一个名为 mycgroup
的 cgroup:
sudo cgcreate -a myuser -t myuser:mygroup -g cpu,cpuacct,memory:mycgroup
这将创建一个名为 mycgroup
的 cgroup,并将其挂载到 /sys/fs/cgroup/cpu,cpuacct,memory/mycgroup
目录。
3.2 将进程添加到 cgroup
你可以使用 cgclassify
命令将一个正在运行的进程添加到一个 cgroup。例如,将进程 ID 为 1234 的进程添加到 mycgroup
:
sudo cgclassify 1234 mycgroup
3.3 设置资源限制
你可以通过修改 cgroup 目录中的文件来设置资源限制。例如,设置 mycgroup
的 CPU 时间限制:
echo "10000" | sudo tee /sys/fs/cgroup/cpu/mycgroup/cpu.cfs_quota_us
这将限制 mycgroup
中的进程每秒可以使用 10000 微秒的 CPU 时间。
3.4 监控 cgroup
你可以使用 cgexec
命令监控 cgroup 中的进程。例如,监控 mycgroup
:
sudo cgexec -g cpu,cpuacct,memory:mycgroup top
4. 使用 cgroups 限制和管理系统资源
4.1 限制 CPU 使用
你可以使用 cgroups 限制进程的 CPU 使用。例如,创建一个名为 cpu_limit
的 cgroup 并限制其 CPU 使用:
sudo cgcreate -g cpu:cpu_limit
echo "10000" | sudo tee /sys/fs/cgroup/cpu/cpu_limit/cpu.cfs_quota_us
然后,将需要限制 CPU 使用率的进程添加到 cpu_limit
cgroup:
sudo cgclassify <PID> cpu_limit
4.2 限制内存使用
你可以使用 cgroups 限制进程的内存使用。例如,创建一个名为 memory_limit
的 cgroup 并限制其内存使用:
sudo cgcreate -g memory:memory_limit
echo "100000" | sudo tee /sys/fs/cgroup/memory/memory_limit/memory.limit_in_bytes
然后,将需要限制内存使用率的进程添加到 memory_limit
cgroup:
sudo cgclassify <PID> memory_limit
4.3 限制磁盘 I/O
你可以使用 cgroups 限制进程的磁盘 I/O。例如,创建一个名为 io_limit
的 cgroup 并限制其磁盘 I/O:
sudo cgcreate -g blkio:io_limit
echo "1000" | sudo tee /sys/fs/cgroup/blkio/io_limit/blkio.throttle.read_bps_device
echo "1000" | sudo tee /sys/fs/cgroup/blkio/io_limit/blkio.throttle.write_bps_device
然后,将需要限制磁盘 I/O 的进程添加到 io_limit
cgroup:
sudo cgclassify <PID> io_limit
5. 总结
cgroups 是一个强大的系统资源管理工具,它允许你限制和管理进程对系统资源的使用。通过使用 cgroups,你可以确保系统资源的合理分配,避免进程之间的资源竞争,并提高系统的整体性能和稳定性。