本篇摘要
本文围绕Linux资源管理与容器技术展开,通过pidstat监控、stress压测演示Cgroups对CPU/内存的精准控制,并实战Ubuntu 22.04下LXC容器的创建、隔离及销毁,验证资源限制与轻量级虚拟化能力。

欢迎拜访: 点击进入博主主页 本篇主题: Docker之cgroups+lxc操作详解 制作日期: 2025.08.28 隶属专栏: 点击进入所属Docker专栏
一. Cgroups资源控制
pidstat与stress
pidstat
- -u:默认参数,显示各进程的 CPU 使用统计。
- -r:显示各进程的内存使用统计。
- -d:显示各进程的 IO 使用情况。
- -p:指定进程号,ALL 表示所有进程。
- -C:指定命令。
- -l:显示命令名和参数。
stress
- -c, –cpu N:产生 N 个进程,每个进程循环调用 sqrt 函数产生 CPU 压力。
- -i, –io N:产生 N 个进程,每个进程循环调用 sync 将内存缓冲区内容写到磁盘上产生 IO 压力,SSD 磁盘环境可能因大量调用 sync 导致 sys 升高但 iowait 为 0。
- -m, –vm N:产生 N 个进程,每个进程循环调用 malloc/free 函数分配和释放内存。
- –vm-bytes B:指定分配内存的大小。
- –vm-keep:一直占用内存,区别于不断释放和重新分配。
- -d, –hdd N:产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件)。
- –hdd-bytes B:指定文件大小。
- -t, –timeout N:在 N 秒后结束程序。
- -q, –quiet:程序运行过程中不输出信息。
- Ubuntu:卸载命令为 apt remove stress -y,安装命令为 apt install stress -y。
下面来简单测试下:
测试stress对用户cpu模拟产生压力:


测试stress对内核cpu模拟产生压力:


测试stress对写入文件产生压力:


其他测试就不过多演示了。
cgroups
相当于进行资源控制的。
查看支持版本:

- 支持两个版本!
查看cgroups系统:

通过挂载信息找到不同方位控制组存储位置:

查看对shell的cpu的控制信息:

使用cgroups进行对内存的控制
查看相关内容挂载信息:

进入关于内存的挂载位置:
在对应目录里面创建目录,让它受到cgroup控制,发现被初始化好了:
查看最大内存使用限制:

这里改成 20M:

然后进行对内存的压力测试(写50M)及监测:

- 发现正常。
但是如果把对应的pid放入到cgroup限制的里面,它就只能被限制使用20M,然后对应的stress对应的12817进程就会被杀死。

- 符合预期。
总结下:这里对应cgroups有个专门控制内存的文件夹,然后进去后,只要在这里面创建目录,就会自动被初始化一些配置信息,然后这里可以对内存进行限制,然后只需要把对应pid写入对应tasks里面,然后这个进程运行就会收到cgroup里面配置信息的限制了!
使用cgroups进行对用户级cpu的控制
首先我们让stress不停的进行计算的压力测试(在用户cpu内),然后一开始会看到cpu被打满,之后让这个stress进程被它管理起来,然后把对应的cpu利用上线搞到20%,观察pidstat检测情况:
先查找一样cpu组的位置: 

这里发现这里面控制的进程对cpu利用可以满,创建对应测试目录进入。
启动对应的压力测试+监测:

- 监测对应的stress名字的进程,每1秒打一次,200000000次。

- 进行1个进程计算来对用户cpu进行压力测试。

- 把对应的cgroup组可用cpu限制在20%。

- 进行添加对应进程。
最后观察监测情况:

- 发现符合预期。
二.LXC容器
LXC是什么: LXC(LinuX Containers)即Linux容器,属于操作系统层虚拟化技术,是Linux内核容器功能的用户空间接口。它把应用软件系统打包成“容器”,容器内包含应用代码、所需操作系统核心与库;借助统一名字空间和共享API分配硬件资源,为应用打造独立沙箱运行环境,让Linux用户能便捷创建、管理系统或应用容器。
LXC的特点与局限:
- 它是早期简化容器技术使用的方案,用简易工具和模板降低了容器技术使用门槛。
- 但和“直接通过内核调用来用容器技术”比,复杂度没降太多——得学习LXC命令工具,且内核创建依赖命令,批量操作做数据迁移不方便;隔离性也不如虚拟机强。
与Docker的关系:
LXC存在局限后,Docker出现。某种程度上,Docker可看作LXC的增强版,弥补了LXC在易用性、隔离性等方面的不足,推动容器技术进一步普及和发展。
简单来说,LXC是Linux下较早的容器化技术,简化了容器使用但也存在操作门槛与隔离性短板,后续Docker在其基础上做了诸多优化增强,成为更流行的容器解决方案之一。
如图:

LXC指令
1. 检查与准备
- lxc-checkconfig:检查系统环境是否能满足容器运行要求。
2. 容器生命周期管理
- lxc-create:创建新的LXC容器,需指定容器名称与使用的模板。
- lxc-start:启动指定的LXC容器(示例中用了 -d 后台启动)。
- lxc-stop:停止正在运行的LXC容器。
- lxc-destroy:删除已停止的LXC容器。
3. 容器信息查看与交互
- lxc-ls:列出当前系统中所有LXC容器(可加 -f 打印更详细信息)。
- lxc-info:查看某一个LXC容器的详细信息。
- lxc-attach:进入容器内部并执行指定命令(也可直接进入交互式Shell)。
基于linux的ubuntu22.04进行简单的容器生成测试
1.首先安装LXC:
这段内容主要是关于在Ubuntu系统上安装LXC(Linux Containers)的步骤,分为卸载已有LXC和全新安装LXC两部分,最后还提到了CentOS安装(但内容未展示完)。下面是简单概括:
Ubuntu 安装前的卸载(若有旧版LXC)
如果要卸载旧版LXC,按以下步骤清理:
检查并停止容器:
- 用 systemctl status lxc 查看LXC服务状态。
- 用 lxc-stop -n xxx 停止指定容器(xxx 是容器名);也可先用 lxc-ls -f 遍历所有容器再批量停止。
- 用 lxc-destroy -n xxx 删除已停止的容器。
卸载LXC软件包: 执行 apt-get purge –auto-remove lxc lxc-templates 彻底卸载LXC及模板。
验证卸载: 再次执行 systemctl status lxc,确认服务已不存在,说明卸载完成。
Ubuntu 全新安装LXC(无旧版时)
若系统没装过LXC,直接执行安装:
安装必要软件包: 运行 apt install lxc lxc-templates bridge-utils -y,一次性装好LXC主程序、配置模板、网桥工具。
检查服务状态: 执行 systemctl status lxc,确认LXC服务正常运行。
2.检查对状态以及是否存在容器:



- 发现不存在。
3.下面进行LXC容器创建:
lxc–create –t ubuntu —name host1 — –r xenial –a amd64
解释下:
| lxc-create | LXC 的核心命令,用于创建新容器。 |
| -t ubuntu | 指定使用 Ubuntu 模板 来创建容器(即基于 Ubuntu 系统镜像生成容器)。这里的 ubuntu 是 LXC 预置的模板名称,代表官方提供的 Ubuntu 安装模板。 |
| –name host1 | 设置容器的名称为 host1(后续通过该名称管理容器,如启动、停止等)。 |
| — | 分隔符,用于区分 lxc-create 的通用参数和 模板特有的参数(后面 -r 和 -a 是 Ubuntu 模板专用的)。 |
| -r xenial | 指定容器的 Ubuntu 版本为 xenial(即 Ubuntu 16.04 LTS)。-r 是模板参数,代表 release(发行版版本)。 |
| -a amd64 | 指定容器的 系统架构为 amd64(即常见的 64 位 x86 架构,适用于大多数现代电脑)。-a 是模板参数,代表 architecture(架构)。 |

- 成功并返回对应的用户名及密码。
4.检查相关信息:

- 没有运行,其他正常。
5.启动容器,换个机器进行ssh连接对应容器:


6.测试下功能:
新机器:

宿主机:

- 这里发现明显不一样,说明对应的容器已经与外界隔离了。
7.宿主机进入容器内部执行:

8.停止运行容器+释放:

- 成功销毁!
三.本篇小结
我通过实战掌握了用pidstat和stress测试Cgroups资源控制,限制CPU和内存;并在Ubuntu上实操LXC容器创建与管理,验证了其隔离性,理解了容器化技术的核心原理与基础操作。





