Docker基础-cgroup_docker cgroup(1)

文章介绍了Linux下的压力测试工具stress,其用于CPU、内存、IO和磁盘的压力测试,并详细解释了stress的参数和使用方法。同时,文章还深入讨论了cgroups(控制组)在内存和CPU资源控制方面的应用,包括创建cgroups、设置策略和实际操作示例。
摘要由CSDN通过智能技术生成

参数:

  • -u:默认参数,显示各进程的 CPU 使用统计
  • -r:显示各进程的内存使用统计
  • -d:显示各进程的 IO 使用情况
  • -p:指定进程号,ALL 表示所有进程
  • -C:指定命令
  • -l:显示命令名和所有参数

示例:

查看指定进程所占用内存的使用情况
在这里插入图片描述
每隔1秒监控一次mysql进程使用内存情况,总共监控1000次
在这里插入图片描述

stress

作用:stress 是 Linux 的一个压力测试工具,可以对 CPU、 Memory、 IO、磁盘进行压力测试。

语法:

stress [OPTION [ARG]]

参数:

  • -c, --cpu N:产生 N 个进程,每个进程都循环调用 sqrt 函数产生 CPU 压力。
  • -i, --io N:产生 N 个进程,每个进程循环调用 sync 将内存缓冲区内容写到磁盘上,产生 IO 压力。通过系统调用 sync 刷新内存缓冲区数据到磁盘中,以确保同步。如果缓冲区内数据较少,写到磁盘中的数据也较少,不会产生 IO 压力。在 SSD 磁盘环境中尤为明显,很可能 iowait 总是 0,却因为大量调用系统调用 sync,导致系统 CPU 使用
    率 sys 升高。
  • -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:程序在运行的过程中不输出信息

示例:

创建 1一个进程,对cpu来进行压力测试

stress -c 1

cgroup试验

cgroups 信息查看
cgroups 版本查看

查看支持的版本
在这里插入图片描述

cgroups 子系统查看

可以查看到可以控制的资源
在这里插入图片描述

cgroups 挂载信息查看

查看控制组的存储路径
在这里插入图片描述

查看一个进程上的 cgroup 限制

下面的示例是通过以一个进程来如何找到自己的控制组

1.以当前 shell 进程为例,查看进程的 cgroup

在这里插入图片描述
2.比如 cpu 在 user.slice,我们可以找到这个目录,里面有对 init 进程的详细限制信息
在这里插入图片描述

使用 cgroups 对内存进行控制

1.创建内存的 cgroup 控制组,我们进入到 cgroup 的内存控制目录/sys/fs/cgroup/memory,我们创建目录 test_memory

[root@VM-0-11-centos memory]# mkdir test\_memory
[root@VM-0-11-centos memory]# ls
cgroup.clone_children memory.kmem.slabinfo memory.memsw.limit_in_bytes memory.swappiness
cgroup.event_control memory.kmem.tcp.failcnt memory.memsw.max_usage_in_bytes memory.usage_in_bytes
cgroup.procs memory.kmem.tcp.limit_in_bytes memory.memsw.usage_in_bytes memory.use_hierarchy
cgroup.sane_behavior memory.kmem.tcp.max_usage_in_bytes memory.move_charge_at_immigrate notify_on_release
memory.failcnt memory.kmem.tcp.usage_in_bytes memory.numa_stat release_agent
memory.force_empty memory.kmem.usage_in_bytes memory.oom_control tasks
memory.kmem.failcnt memory.limit_in_bytes memory.pressure_level test_memory
memory.kmem.limit_in_bytes memory.max_usage_in_bytes memory.soft_limit_in_bytes YunJing
memory.kmem.max_usage_in_bytes memory.memsw.failcnt memory.stat

2.可以看到内存限制文件已经自动在 test_memory 中创建完成了, cgroups 文件系 统会在创建文件目录的时候自动创建相应的配置文件

[root@VM-0-11-centos memory]# cd test_memory/
[root@VM-0-11-centos test_memory]# ll
total 0
-rw-r–r-- 1 root root 0 Sep 12 14:27 cgroup.clone_children
–w–w–w- 1 root root 0 Sep 12 14:27 cgroup.event_control
-rw-r–r-- 1 root root 0 Sep 12 14:27 cgroup.procs
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.failcnt
–w------- 1 root root 0 Sep 12 14:27 memory.force_empty
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.failcnt
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.limit_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.max_usage_in_bytes
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.slabinfo
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.tcp.failcnt
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.tcp.limit_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.tcp.max_usage_in_bytes
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.tcp.usage_in_bytes
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.kmem.usage_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.limit_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.max_usage_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.memsw.failcnt
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.memsw.limit_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.memsw.max_usage_in_bytes
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.memsw.usage_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.move_charge_at_immigrate
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.numa_stat
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.oom_control
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.soft_limit_in_bytes
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.stat
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.swappiness
-r–r–r-- 1 root root 0 Sep 12 14:27 memory.usage_in_bytes
-rw-r–r-- 1 root root 0 Sep 12 14:27 memory.use_hierarchy
-rw-r–r-- 1 root root 0 Sep 12 14:27 notify_on_release
-rw-r–r-- 1 root root 0 Sep 12 14:27 tasks

3.配置 cgroup 的策略为最大使用 20M 内存
在这里插入图片描述
4.启动 1 个消耗内存的进程,每个进程占用 50M 内存
在这里插入图片描述
5.打开一个新的 shell 窗口 B 窗口,使用 pidstat 查看状态
在这里插入图片描述
6.将进程 id 移动到我们的 cgroup 策略

cd /sys/fs/cgroup/memory echo 20968 > tasks

7.可以看到进程无法申请到足够内存退出
在这里插入图片描述
可以看到进程消失了
在这里插入图片描述

使用 cgroups 对 cpu 进行控制

1.创建内存的 cgroup 控制组,我们进入到 cgroup 的内存控制目录 /sys/fs/cgroup/cpu,创建目录 test_cpu,可以看到系统会自动为我们创建 cgroup 的 cpu 策略

[root@VM-0-11-centos cpu,cpuacct]# mkdir test\_cpu
[root@VM-0-11-centos cpu,cpuacct]# cd test\_cpu/
[root@VM-0-11-centos test_cpu]# ls
cgroup.clone_children cpuacct.stat cpu.cfs_period_us cpu.rt_runtime_us notify_on_release
cgroup.event_control cpuacct.usage cpu.cfs_quota_us cpu.shares tasks


### 总结

根据路线图上的重点去进行有针对性的学习,在学习过程中,学会写笔记,做总结。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

这里分享一些前端学习笔记:

* **html5 / css3 学习笔记**  

  ![](https://img-blog.csdnimg.cn/img_convert/c7aea89db6b059151c753196f8f4e9b5.png)

  

* **JavaScript 学习笔记**  

  ![](https://img-blog.csdnimg.cn/img_convert/af0c75f32f6618baccf39ce440a0fb5c.png)

* **Vue 学习笔记**  

  ![](https://img-blog.csdnimg.cn/img_convert/94cca01f6717f672208838e9ac549be1.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值