当前位置:首页 > 系统教程 > 正文

Cgroups精准调控与LXC容器全流程:用pidstat/stress测试Cgroups限流(手把手玩转Ubuntu LXC容器)

Cgroups精准调控与LXC容器全流程:用pidstat/stress测试Cgroups限流(手把手玩转Ubuntu LXC容器)

本文将从零开始,带你深入理解Cgroups资源限制的原理,并通过stress压力测试工具和pidstat性能监控工具验证限流效果。随后,我们将完整演示如何在Ubuntu系统上安装、创建并管理LXC容器,并在容器中实践Cgroups的精准控制。无论你是运维新手还是开发者,都能通过本文的手把手操作,掌握Linux容器化技术的核心。

1. 环境准备与工具安装

我们使用Ubuntu 20.04/22.04 LTS作为实验系统。首先更新软件包并安装必要的工具:stress(压力测试)、sysstat(包含pidstat)、cgroup-tools(方便操作cgroups)以及lxclxc-templates(容器管理)。

    sudo apt updatesudo apt install stress sysstat cgroup-tools lxc lxc-templates -y  

2. Cgroups精准调控实战

Cgroups(Control Groups)是Linux内核提供的资源隔离机制,可限制、记录进程组使用的CPU、内存等资源。本教程以cgroups v1为例,使用cgroup-tools进行操作。

Cgroups精准调控与LXC容器全流程:用pidstat/stress测试Cgroups限流(手把手玩转Ubuntu LXC容器) Cgroups资源限制  LXC容器 pidstat性能监控 stress压力测试 第1张

2.1 创建cgroup并设置限制

创建一个名为testgroup的控制组,同时限制CPU和内存:

    sudo cgcreate -g cpu,memory:/testgroup# 限制CPU使用率为50% (cfs_quota=50000, period=100000)sudo cgset -r cpu.cfs_quota_us=50000 -r cpu.cfs_period_us=100000 testgroup# 限制内存最大512MBsudo cgset -r memory.limit_in_bytes=512M testgroup  

2.2 用stress产生压力并用pidstat监控

在testgroup中运行stress,启动1个CPU进程和1个内存进程(分配300MB),同时开启pidstat观察实时资源使用:

    # 终端1:启动stress(在cgroup中)sudo cgexec -g cpu,memory:/testgroup stress --cpu 1 --vm 1 --vm-bytes 300M --timeout 60# 终端2:使用pidstat监控对应进程(需替换PID)pidstat -u -r -p $(pgrep -f "stress --cpu") 1  

你会看到CPU使用率被限制在50%左右,内存占用稳定在300MB以内(未超512MB),证明Cgroups资源限制生效。

3. LXC容器全流程操作

LXC容器是一种操作系统级虚拟化技术,它直接使用宿主机的内核,通过namespaces和cgroups实现环境隔离。下面我们将从头创建并运行一个Ubuntu容器。

3.1 创建容器

    sudo lxc-create -n mycontainer -t ubuntu  

该命令会从模板下载Ubuntu基础镜像并创建容器mycontainer,存储于/var/lib/lxc/目录。

3.2 启动并进入容器

    sudo lxc-start -n mycontainer -d   # 后台启动容器sudo lxc-attach -n mycontainer      # 进入容器终端  

进入容器后,可以像操作普通Ubuntu系统一样安装软件、运行进程。

3.3 查看容器对应的cgroup

在宿主机上,每个LXC容器都会自动创建一组cgroup(通常在/sys/fs/cgroup/下)。例如查看CPU限制:

    ls /sys/fs/cgroup/cpu/lxc/mycontainer/  

你可以直接修改这些文件来调整容器的资源配额,例如限制容器CPU使用率为25%:

    echo 25000 | sudo tee /sys/fs/cgroup/cpu/lxc/mycontainer/cpu.cfs_quota_us  

4. 在LXC容器中测试Cgroups限流

在容器内安装stress(容器联网时可直接apt安装),然后运行压力测试,同时在宿主机上用pidstat监控容器内进程。

    # 容器内apt update && apt install stress -ystress --cpu 2 --timeout 60# 宿主机pidstat -u -p $(pgrep -f "stress --cpu") 1  

若之前已修改了容器的cpu.cfs_quota_us,你会发现stress进程的CPU使用率被限制在设定值以下。通过这种方式,我们可以对LXC容器实现精细化的资源管控。

5. 总结

本文通过pidstat性能监控stress压力测试,演示了从手动创建cgroup到管理LXC容器的完整流程。掌握Cgroups资源限制LXC容器技术,能够帮助你更好地理解容器化底层原理,并为后续学习Docker、Kubernetes等高级技术打下坚实基础。动手试试吧!