51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

linux cgroup 详解 (stress 压力测试)Linux Control Group

Linux CGroup全称Linux Control Group,

是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。

这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。

在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展。

cat /proc/cgroups

如上图所示,在Linux系统中能够控制的资源列表如下:

    cpu:
        主要限制进程的cpu使用率。
    cpuacct:
        可以统计cgroups中的进程的cpu使用报告。
    cpuset:
        可以为cgroups中的进程分配单独的cpu节点或者内存节点。
    memory:
        可以限制进程的memory使用量。
    blkio:
        可以限制进程的块设备io。
    devices:
        可以控制进程能够访问某些设备。
    net_cls:
        可以标记cgroups中进程的网络数据包,然后可以使用tc模块(traffic control)对数据包进行控制。
    net_prio:
        这个子系统用来设计网络流量的优先级
    freezer:
        可以挂起或者恢复cgroups中的进程。
    ns:
        可以使不同cgroups下面的进程使用不同的namespace
    hugetlb:
        这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。

这里白眉大叔 仅用 CPU 来给大家展示一下:

CPU资源限制案例:

(1)查看Cgroup类型

mount -t cgroup

(2)进入到CPU的挂载路径,并创建自定义的资源限制组。

cd /sys/fs/cgroup/cpu && mkdir baimei-linux && ls baimei-linux 

(3)使用stress压力测试

yum -y install epel-release

yum -y install stress

stress -c 4 -v -t 20m  # 压力测试20分钟,启动4个worker进程的CPU压测。如下图所示,4个cpu瞬间打满100%。

(4)限制CPU的使用率在30%

cd /sys/fs/cgroup/cpu/baimei-linux && echo 30000 > cpu.cfs_quota_us

(5)将任务的ID加入自定义限制组

ps -ef | grep stress | grep -v grep

root       9438   8292  0 21:16 pts/3    00:00:00 stress -c 4 -v -t 20m
root       9439   9438 28 21:16 pts/3    00:00:01 stress -c 4 -v -t 20m
root       9440   9438 27 21:16 pts/3    00:00:01 stress -c 4 -v -t 20m
root       9441   9438 27 21:16 pts/3    00:00:01 stress -c 4 -v -t 20m
root       9442   9438 28 21:16 pts/3    00:00:01 stress -c 4 -v -t 20m

 cd /sys/fs/cgroup/cpu/baimei-linux  # 进入到咱们自定义的限制组,分别加入限制的进程ID

echo 9438 >> task  # 建议加入后,立刻查看top的信息,最好执行一个看一个效果。

我们来整理一下思路:

docker的CPU限制案例:

1.启动容器

docker run --name linux86-stress-cpu -d baimei2020/baimei-linux-tools:v0.1 stress -c 4 -v -t 20m

2.查看容器的状态

3.更新CPU限制案例,修改CPU的内存限制为30%

docker container update  --cpu-quota=30000 linux86-stress-cpu

docker的内存限制案例:

可以直接下载 镜像 直接使用:

镜像文件: https://url69.ctfile.com/d/253469-56533106-c37f37?p=2206 (访问密码: 2206)

1.启动容器

docker run --name linux86-stress-memory -d baimei2020/baimei-linux-tools:v0.1  tail -f /etc/hosts

2.查看容器的状态

 docker stats linux86-stress-memory

3.更新memeory限制案例,限制内存使用量为200M。

docker container update -m 209715200 --memory-swap 209715200  linux86-stress-memory 

4.压测是否能够超过200M内存

到此 namespace的 资源限制 案例应该可以理解了。

docker 依赖的linux内核技术chroot cgroup namespace overlay : 连接

赞(9)
未经允许不得转载:工具盒子 » linux cgroup 详解 (stress 压力测试)Linux Control Group