cgroups v1简介

cgroup 概念

Cgroup,全称Control Group(控制组),是Linux系统内核提供的一个特性(Linux 2.6.24内核开始将Cgroup加入主线)。

主要作用:

  • 限制和隔离一组进程对系统资源的使用,也就是做资源QoS。可控制的资源主要包括CPU、内存、block I/O、网络带宽等等。
  • 资源统计,可以统计资源使用量,比如CPU使用时长、内存使用量。
  • 对进程组执行挂起、恢复。

cgroup是虽然是内核提供的功能,但是我们事实上可以不通过内核就能够轻松操作。

linux使用虚拟文件系统来为用户提供相关的接口。这也符合linux内一切皆文件的宗旨。

通过 man cgroups 命令可以在Linux中看到相关的概念。

可以将任意cgroups子系统挂载到指定的目录。与mount一致,只不过需要指定类型为 cgroup。

mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacctumount /sys/fs/cgroup/pids

在目前,默认情况下,一般会由systemd自动挂载到/sys/fs/cgroup中。

可以通过 ls /sys/fs/cgroup看到各个文件夹。这就是挂载的资源管理器

# ls /sys/fs/cgroup/
blkio  cpu  cpu,cpuacct  cpuacct  cpuset  devices  freezer  hugetlb  memory  net_cls  net_cls,net_prio  net_prio  perf_event  pids  systemd

subsystem(子系统)

cgroup 按照资源包含很多的子系统。

  1. cpu 子系统,主要限制进程的 cpu 使用率。
  2. cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。
  3. cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
  4. memory 子系统,可以限制进程的 memory 使用量。
  5. devices 子系统,可以控制进程能够访问某些设备。
  6. freezer 子系统,可以挂起或者恢复 cgroups 中的进程。
  7. net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
  8. blkio 子系统,可以限制进程的块设备 io。
  9. pref_event 子系统,Cgroups中的进程监控。
  10. net_prio 子系统,Cgroups中的网络优先级。
  11. hugetlb 子系统,巨页(大内存页)限制。
  12. pids 子系统,进程数量限制。
  13. rdma 子系统,限制 RDMA/IB 特殊资源使用。

不过并不一定你的 linux 就有这些子系统,它们是在不同版本的内核中加入的。

cgroup(组)

除了子系统之外,还需要了解 group 的概念,在 cgroups 中,资源都是以组为单位控制的,每个组包含一个或多个的子系统。你可以按照任何自定义的标准进行组的划分。划分组之后,你可以将任意的进程加入、迁移到任意组中并且实时生效(但是对于进程的子进程不影响)。

hierarchy(层级树)

一组以树状结构排列的cgroup就是hierarchy(层级树),结合虚拟文件系统来理解,通过创建、删除、重命名子目录来定义层次结构。子目录能够继承父目录的全部资源(当然了,不能超过),也可以基于父目录的资源限制进行进一步的资源大小限制。父目录如果调整了资源大小,子目录同样会马上受到影响。

每个层级树可以关联任意个数的subsystem,但是每个subsystem最多只能被挂在一颗树上。

cgroup 简单操作

如果在对应子系统目录下创建目录,则会自动生成子文件结构。 mkdir /sys/fs/cgroup/cpu/cg1

看起来像这样:

# ls -l /sys/fs/cgroup/cpu/cg1
total 0
-rw-r--r--. 1 root root 0 Jul  7 08:22 cgroup.clone_children
--w--w--w-. 1 root root 0 Jul  7 08:22 cgroup.event_control
-rw-r--r--. 1 root root 0 Jul  7 08:22 cgroup.procs
-rw-r--r--. 1 root root 0 Jul  7 08:22 cpu.cfs_period_us
-rw-r--r--. 1 root root 0 Jul  7 08:22 cpu.cfs_quota_us
-rw-r--r--. 1 root root 0 Jul  7 08:22 cpu.rt_period_us
-rw-r--r--. 1 root root 0 Jul  7 08:22 cpu.rt_runtime_us
-rw-r--r--. 1 root root 0 Jul  7 08:22 cpu.shares
-r--r--r--. 1 root root 0 Jul  7 08:22 cpu.stat
-r--r--r--. 1 root root 0 Jul  7 08:22 cpuacct.stat
-rw-r--r--. 1 root root 0 Jul  7 08:22 cpuacct.usage
-r--r--r--. 1 root root 0 Jul  7 08:22 cpuacct.usage_percpu
-rw-r--r--. 1 root root 0 Jul  7 08:22 notify_on_release
-rw-r--r--. 1 root root 0 Jul  7 08:22 tasks

接下来尝试限制cpu使用率 关于cpu相关参数可查阅:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/resource_management_guide/sec-cpu

这个网站是我目前找到的最详细的中文文档了。。。

编写一个简单的java程序:

public class Demo {public static void main(String[] args) {for( int i = 0; i < 10; i++) {new Thread(() -> {while(!Thread.currentThread().isInterrupted()) {System.out.println("hello");}}).start();}}
}

直接运行可看到cpu使用率为100%:

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND4073 root      20   0 2261340  32440  12404 S 91.7  3.3   1:24.41 java

先编辑一下cgroup的cpu使用率

echo 10000 > cpu.cfs_quota_us 
echo 50000 > cpu.cfs_period_us

cpu.cfs_quota_us 代表每个时间片某一阶段(由 cpu.cfs_period_us 规定)某个 cgroup 中所有任务可运行的时间总量,单位为微秒(µs,这里以 “us” 代表)

所以设置每50ms的时间片中可以使用10ms。这也就是cpu的20%的算力

向 cgroup.procs 写入进程id 4073 echo 4073 > /sys/fs/cgroup/cpu/cgroup.procs

在使用top看一下cpu使用率,结果如下,可以发现cpu的使用率基本是不超过20%的。

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND4073 root      20   0 2261340  30840  10524 S 19.9  3.1   7:08.51 java

其他诸如内存等限制,都可以查阅文档进行限制。

总结

cgroup 是容器化的基石之一,但是实际上它的使用并没有多么的复杂,凭借 cgroup 我们可以轻松的实现任意资源的限制。 事实上,它不仅仅可以帮助我们容器化,即使是在我们的普通业务中,也是可以使用的。

比如我们的某个服务是比较费资源的服务,例如爬虫,我们不可能希望这样一个服务直接把我们的一台服务器全部跑满,因为可能需要一些资源来做其他的事情,那么我们就可以将进程移动到我们的资源组中,从而限制它的使用率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CARD】多变化字幕的上下文感知差异提炼(ACL 2024)

摘要 Multi-change captioning旨在用自然语言描述图像对中的复杂变化。和图像字幕相比&#xff0c;这个任务要求模型具有更高层次的认知能力来推理任意数量的变化。本文提出一种新的上下文感知差异提取网络&#xff08;CARD&#xff09;。给定一个图像对&#xff0c;CARD首先解…

vm.max_map_count是什么?起到什么作用

vm.max_map_count 是 Linux 内核中的一个参数&#xff0c;它决定了一个进程可以拥有的最大内存映射区域数。内存映射区域是指内存映射文件、匿名内存映射等。这个参数对于一些应用程序&#xff08;如 Elasticsearch&#xff09;特别重要&#xff0c;因为它们在运行时会创建大量…

socket通讯可以直接传地址吗?【面试】

在网络编程中&#xff0c;socket 通信不直接传输内存地址。这是因为网络通信是在不同的内存空间和可能不同的计算机之间进行的&#xff0c;内存地址在不同的进程和机器上没有意义。相反&#xff0c;socket 通信使用套接字&#xff08;socket&#xff09;&#xff1a; IP地址&a…

深入浅出Java的函数式编程

深入浅出Java的函数式编程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨Java中的函数式编程&#xff0c;这是一种强大的编程范式&#xff0c;它…

用 Terraform 初始化 GCP环境

前置准备 安装 Terraform 请参考 Terraform 官方文件 安装 Terraform。MacOS 可以使用 Homebrew 安装&#xff1a; brew install terraform 安装 Google Cloud SDK 请参考 Google Cloud SDK 官方文件 安装 Google Cloud SDK。MacOS 可以使用 Homebrew 安装&#xff1a; b…

Multigranularity and MultiscaleProgressive Contrastive Learning

这篇文章将一张图片划分为四个不同细粒度大小的图片&#xff0c;然后输出四个神经网络&#xff0c;这四个神经网络共享权重&#xff0c;得到四个输出&#xff0c;将这四个输出求交叉熵损失和对比学习损失&#xff0c;共同监督模型学习。 通过对比学习&#xff0c;最大化一个Bat…

Microsoft Edge无法启动搜索问题的解决

今天本来想清一下电脑&#xff0c;看到visual studio2022没怎么用了就打算卸载掉。然后看到网上有篇文章说进入C盘的ProgramFiles&#xff08;x86&#xff09;目录下的microsoft目录下的microsoft visual studio目录下的install目录中&#xff0c;双击InstallCleanup.exe&#…

谷歌浏览器与谷歌驱动匹配

网址&#xff1a;Chrome for Testing availability (googlechromelabs.github.io)

中医诊所处方药材管理系统有哪些必备功能?

随着信息技术的飞速发展&#xff0c;传统中医行业也迎来了数字化转型的浪潮。欣九康诊疗系统&#xff0c;具有全面的功能&#xff0c;可以作为一款合适中医诊所处方药材管理系统来使用。那么&#xff0c;中医诊所使用欣九康&#xff0c;有哪些独特的功能和优势呢?能否为中医诊…

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人脸 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明&#xff0c;具体可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类&#xff0c;它用于实现一种快速的物体检测算法&#xff0c;称…

API接口技术开发分享;按关键字搜索淘宝、天猫商品API返回值接入说明

淘宝数据API的接入流程主要包括注册key账号、创建开发者应用、获取ApiKey和ApiSecret、申请API权限等步骤。淘通过这些接口可以获取商品、订单、用户、营销和物流管理等多方面的数据。以下是关于淘宝数据API接入流程的相关介绍&#xff1a; 注册key账号&#xff1a;进行账号注册…

JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码

JAVA医院绩效考核系统源码 功能特点&#xff1a;大型医院绩效考核系统源码 医院绩效管理系统主要用于对科室和岗位的工作量、工作质量、服务质量进行全面考核&#xff0c;并对科室绩效工资和岗位绩效工资进行核算的系统。医院绩效管理系统开发主要用到的管理工具有RBRVS、DRGS…

AUCell和AddModuleScore函数进行基因集评分

AUCell 和AddModuleScore 分析是两种主流的用于单细胞RNA测序数据的基因集活性分析的方法。这些基因集可以来自文献、数据库或者根据具体研究问题进行自行定义。 AUCell分析原理&#xff1a; 1、AUCell分析可以将细胞中的所有基因按表达量进行排序&#xff0c;生成一个基因排…

Unity核心

回顾 Unity核心学习的主要内容 项目展示 基础知识 认识模型制作流程 2D相关 图片导入设置相关 图片导入概述 参数设置——纹理类型 参数设置——纹理形状 参数设置——高级设置 参数设置——平铺拉伸 参数设置——平台设置&#xff08;非常重要&#xff09; Sprite Sprite Edit…

【Apache Doris】周FAQ集锦:第 7 期

【Apache Doris】周FAQ集锦&#xff1a;第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

uvalde-bash提权

**后续需要虚拟机的私信我&#xff0c;我会打包进行文章发布链接&#xff0c;请持续关注&#xff01;&#xff01;&#xff01;** VM网络不通也没法改密码进去&#xff0c;只能下个VirtualBox和VMware互通了 vmware与virtualbox虚拟机互通_vmware和virtualbox互联-CSDN博客 但…

动态规划03(二维01背包,一维01背包,leetcode416)

参考资料&#xff1a; https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; 题目描述&#xff1a; 输入示例 6 1 2 2 3 1 5 2 2 3 1 5 4 3 输出示例 …

软件测试质量度量之 “三级指标体系”

管理学大师彼得 - 德鲁克曾说过&#xff1a;无数据不管理。 数字是人们快速认知事物的一种有效方式。无论在生活还是工作&#xff0c;对事还是对人都息息相关。碰上难以的用数字描述事物或现象肯定是没有找对适用的指标和度量方式。尤其对于质量工程方面的工作&#xff0c;定量…

喂饭教程:AI生成100套Word题库阿里云百炼实训营

郭震原创&#xff0c;手撸码字187022张图 你好&#xff0c;我是郭震 1 实际需求 前段时间&#xff0c;有个关注我的粉丝联系我&#xff0c;是一位大学计算机女老师。 她想做一个二级考试题库&#xff0c;选择题实操题&#xff0c;最好100套以上&#xff0c;拿来给学生练手。 问…

解两道四年级奥数题(等差数列)玩玩

1、1&#xff5e;200这200个连续自然数的全部数字之和是________。 2、2&#xff0c;4&#xff0c;6&#xff0c;……&#xff0c;2008这些偶数的所有各位数字之和是________。 这两道题算易错吧&#xff0c;这里求数字之和&#xff0c;比如124这个数的全部数字之和是1247。 …