Docker基础--CGroups资源控制实战(包含部分指令)

容器虚拟化基础之 cgroups

1. 什么是 cgroups

cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一 系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源 管理提供一个统一的框架。简单说,cgroups 可以限制、记录任务组所使用的物理资 源。本质上来说,cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时 对资源的调度触发相应的钩子以达到资源追踪和限制的目的。

2. 为什么使用 cgroups

其可以做到对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 及 k8s 中的 pod 就使用了 cgroups 提供的资源限制能力来完成 cpu,内存等部 分的资源控制。

比如在一个既部署了前端 web 服务,也部署了后端计算模块的八核服务器上,可以使 用 cgroups 限制 web server 仅可以使用其中的六个核,把剩下的两个核留给后端计算 模块。

3. cgroups 的用途

Resource limitation: 限制资源使用,例:内存使用上限/cpu 的使用限制

Prioritization: 优先级控制,例:CPU 利用/磁盘 IO 吞吐

Accounting: 一些审计或一些统计

Control: 挂起进程/恢复执行进程

4.cgroups 可以控制的子系统

子系统 作用
blkio 对块设备的 I/O 进行限制
cpu 限制 CPU 时间片的分配
cpuacct 生成 cgroup 中的任务占用 CPU 资源的报告,与 cpu 挂载在同一目录
cpuset 给 cgroup 中的任务分配独立的 CPU(多处理器系统)和内存节点
devices 限制设备文件的创建,和对设备文件的读写
freezer 暂停/恢复 cgroup 中的任务
memory 对 cgroup 中的任务的可用内存进行限制,并自动生成资源占用报告
perf_event 允许 perf 观测 cgroup 中的 task
net_cls cgroup 中的任务创建的数据报文的类别标识符,让 Linux 流量控制器(tc 指令)可以识别来自特定 cgroup 任务的数据包,并进行网络限制
hugetlb 限制使用的内存页数量
pids 限制任务的数量
rdma 限制 RDMA 资源(Remote Direct Memory Access,远程直接数据存取)

CGroups 资源控制实战

实战目的

能够查看 cgroups 基本信息,了解容器化中,操作系统是真正的资源控制层,对 cpu 和内存的控制有一定的理解。

基础知识

pidstat

• 概述

pidstat 是 sysstat 的一个命令,用于监控全部或指定进程的 CPU、内存、线程、设备 IO 等系统资源的占用情况。Pidstat 第一次采样显示自系统启动开始的各项统计信息, 后续采样将显示自上次运行命令后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

• 语法

pidstat 选项 \<时间间隔\> \<次数\>

• 参数

-u:默认参数,显示各进程的 CPU 使用统计

-r:显示各进程的内存使用统计

-d:显示各进程的 IO 使用情况

-p:指定进程号,ALL 表示所有进程

-C:指定命令

-l:显示命令名和所有参数

• 安装

Ubuntu 安装

#安装 apt install sysstat -y

#卸载 apt remove sysstat -y

CentOS 安装

#安装 yum install sysstat -y

#卸载 yum remove sysstat -y


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:程序在运行的过程中不输出信息

• 安装

Ubuntu:

#安装 apt install stress -y

#卸载 apt remove stress -y

CentOS:

#安装 yum install stress -y

#卸载 yum remove stress -y

感谢你的观看,期待我们下次再见!

相关推荐
晚风叙码4 分钟前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
正经教主6 分钟前
【FDE系列】阶段2:Day 45(up详细版):综合实战 — Docker + Nginx + Git 完整部署与本周收官
人工智能·git·nginx·docker·fde
Z21-X13 分钟前
云原生运维笔记:硬核拆解OpenStack计算与存储——从主机聚合到Cinder挂载全流程
运维·笔记·学习·云原生·openstack
CodeGL14 分钟前
一文了解:K8s
云原生·容器·kubernetes
开开心心就好18 分钟前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
一只鹿鹿鹿34 分钟前
医院绩效管理体系方案
大数据·运维·安全·web安全·制造
java_logo38 分钟前
Docker 部署 Portainer CE 中文版:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer ce
山东孙燕姿40 分钟前
前端框架升级:不敢动的组件怎么办
大数据·运维·服务器·网络·人工智能·前端框架
古法老登瞎折腾9 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
琥珀.9 小时前
mysql中json数组转列表查询
linux·运维·服务器