linux中cgroup的简单使用

这篇具有很好参考价值的文章主要介绍了linux中cgroup的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 简介

Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展。

Linux CGroupCgroup 可为系统中所运行任务(进程)的用户定义组群分配资源—比如CPU 时间、系统内存、网络带宽或者这些资源的组合。可以监控配置的​​​ cgroup,拒绝cgroup 访问某些资源,甚至在运行的系统中动态配置cgroup。

1.1 主要功能

(1)限制资源使用,比如内存使用上限以及文件系统的缓存限制。

(2)优先级控制,CPU利用和磁盘IO吞吐。

(3)一些审计或一些统计,主要目的是为了计费。

(4)挂起进程,恢复执行进程。

1.2 cgroups子系统

Cgroups(Control Groups)基于进程的限制,而非用户,因此对于超户运行的进程也是一样;

cgroups子系统:

  1. blkio 限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb。
  2. cpu 限制使用cpu比例
  3. cpuacct 产生cgroup任务的cpu资源报告。
  4. cpuset 多核心的cpu时为cgroup任务分配单独的cpu和内存 绑定进程和cpu减少上下文切换 内存访问情况 就近访问内存
  5. devices 允许或拒绝对设备的访问。
  6. freezer 暂停和恢复cgroup任务。
  7. memory 设置内存限制以及产生内存资源报告。
  8. net_cls 可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
  9. net_prio — 这个子系统用来设计网络流量的优先级。

10.ns 可以使不同 cgroups 下面的进程使用不同的 namespace。

11.hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。
linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

2 绑定进程到指定cpu核数

#yum安装
yum install libcgroup libcgroup-tools  numactl  -y
#获取CPU线程数
grep 'processor' /proc/cpuinfo | sort -u | wc -l
#获取CPU NUMA内存节点信息
numactl --hardware
或
lscpu | grep NUMA

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

#创建设置small组策略 4核
cgcreate -g cpuset:small
cgset -r cpuset.cpus=0-3 small
cgset -r cpuset.mems=0 small
 
#创建设置large组策略 8核
cgcreate -g cpuset:large
cgset -r cpuset.cpus=0-7 large
cgset -r cpuset.mems=0 large

默认的cpuset.cpus和cpuset.mems是空的;需要同时设定这2个值,其中mems的值参考numa的node数字,上面通过numactl --hardware查到是0

注意:

  1. cpuset子系统是有两个参数是强制要求定义的,cpuset.cpus和cpuset.mems。

cpuset.cpus(强制)

指定允许这个cgroup 中任务访问的CPU。这是一个用逗号分开的列表,格式为ASCII,使​用小横线(”-”)代表范围。​

cpuset.mems(强制)

指定允许这个cgroup 中任务可访问的内存节点。这是一个用逗号分开的列表,格式​​​为ASCII,使用小横线(”-”)代表范围。

  1. 对于多线程的程序,该方法不生效;
  2. 配置完在/sys/fs/cgroup/cpuset目录会出现smal,large目录。

运行命令

cgexec -g cpuset:small 程序运行命令
cgexec -g cpuset:large 程序运行命令

#示例

#编写一个消耗cpu的脚本

vi t1.sh
#/bin/bash
x=0
while [ True ];do
    x=$x+1
done;

#限制程序运行在固定cpu核数上

#cgexec -g cpuset:small sh t1.sh &

#运行top命令,然后按1,可以看到每个cpu核数的情况

3 限制进程cpu使用率

3.1 示例1

#yum安装
yum install libcgroup libcgroup-tools  numactl  -y
systemctl status cgconfig.service
systemctl start cgconfig.service
#查看cgroup挂载点(centos7.7),此处可参见cgroups子系统
lssubsys -am

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

#创建隔离组
cd /sys/fs/cgroup/cpu
mkdir cpu_test
说明:目录创建完成会自动生成以下文件(注:该目录无法手动删除,如果不加入开机自启,重启后会消失)
ls cpu_test/

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

#跑一个耗cpu的脚本
vi t1.sh
/bin/bash
x=0
while [ True ];do
    x=$x+1
done;
chmod +x t1.sh
sh t1.sh  &

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

#修改参数
echo 20000 > /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us
注:默认-1不限制,现在改成20000,是将cpu.cfs_quota_us设为20000,相对于cpu.cfs_period_us的100000是20%;可以理解cpu使用率限制在20%;
 
#找到进程号增加到cpu tasks里面,在看top,cpu使用率很快就下来
echo 2938 >> /sys/fs/cgroup/cpu/cpu_test/tasks

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

说明:在上面的情况下,如果将三个进程pid都写入到tasks,会出现三个进程共享20%cpu的情况;

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器

3.2 示例2

说明:该部分内容补充示例1,使用命令创建控制群组;

#创建控制群组
cgcreate -g cpu:/g1
说明:这个命令会创建/sys/fs/cgroup/cpu/g1目录出来,在这个目录下有各种cgroup cpu的配置文件;
 
#设置CPU限制参数
cgset -r cpu.cfs_quota_us=20000 g1
#查看是否设置成功
cgget -r cpu.cfs_quota_us g1
 
#启动进程,通过top可以看到cpu占用100%,同时拿到进程pid:2231
cat t1.sh
/bin/bash
x=0
while [ True ];do
    x=$x+1
done;
sh  /tmp/t1.sh  &
 
#将此进程加入控制群组g1
cgclassify -g cpu:/g1 2231
cat /sys/fs/cgroup/cpu/g1/tasks

通过top看,cpu消耗变成了20%
注意:最好将一个进程写在一个控制组内;将多个进程写在一个控制组会共享cpu限制;
如:在一个控制组内写入3个进程,cpu限制使用为20%,每个进程大概会占6%左右;

4 限制内存使用量

#创建控制群组g2
cgcreate -g memory:g2
 
#查看默认内存是没有限制的
cgget -r memory.limit_in_bytes g2
 
#限制内存只有1GB
cgset -r memory.limit_in_bytes=1073741824 g2
 
#执行/tmp/highmemory.sh,进程号是21127 
vi /tmp/highmem.sh
/bin/bash
x="a"
while [ True ];do
    x=$x$x
done;
 
#将highmemory.sh进程加入g2的控制
cgclassify -g memory:g2 21127

5 限制磁盘读取速度

#要控制/dev/sdb的磁盘,通过下述命令查到磁盘驱动号8,16
ls -l /dev/sdb

linux中cgroup的简单使用,# Linux,# Docker,linux,运维,服务器文章来源地址https://www.toymoban.com/news/detail-622637.html

#创建控制组,设定8,16磁盘有1MB的读取限制
cgcreate -g blkio:g1
cgset -r blkio.throttle.read_bps_device='8:16 10485760' g1
 
#启动读取测试命令,拿到pid 14468
dd if=/dev/sdb of=/dev/null
 
#通过命令可以看到对磁盘读写速度的消耗
iotop
 
#将进程加入g1控制组后,读取速度被限制
cgclassify -g blkio:g1 14468

到了这里,关于linux中cgroup的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux系统编程,使用C语言实现简单的FTP(服务器/客户端)

    前言 跟着上官社长 陈哥花了一个月的时间终于把Linux系统编程学的差不多了,这一个月真的是头疼啊,各种bug,调的真心心累,不过好在问题都解决掉了,在此也感谢一下答疑老师,给我提供了很多的思路,本文章是对前段时间学习Linux,做一个小小的总结,才疏学浅,只学

    2024年02月12日
    浏览(73)
  • 白嫖在线云服务器,免费在 linux 服务器使用 docker 。 附视频+附文档

    白嫖在线云服务器,免费在 linux 服务器使用 docker 。 附视频+附文档 视频: https://www.bilibili.com/video/BV1WN411W79V/ 国内互联网经过多年发展,单体应用已经无法支持我们的互联网业务,分布式、微服务架构已经是大势所趋。 就算是一些小公司,也已经开始使用分布式、微服务架

    2024年02月08日
    浏览(68)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(92)
  • 如何使用Docker将.Net6项目部署到Linux服务器(一)

    目录 一 配置服务器环境 1.1 配置yum                                                                                                                     1.1.1 更新yum包 1.1.2 yum命令 1.2 配置docker                                                           

    2024年02月04日
    浏览(47)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(82)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(98)
  • [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

    本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程,本期为大家按照本专栏的基本内容进行多方面的测评。

    2024年02月07日
    浏览(94)
  • 简单几步学会Linux用户使用SSH远程免密登录,LinuxSSH服务器配置允许/禁止某些用户远程登录

    本文基于Linux上CentOS 7版本配合Xshell 7进行演示 目录 一.SSH简介 1.介绍 2.工作流程 二.具体配置免密步骤 1.配置前准备工作 2.正式配置过程 三.在服务器端配置SSH远程黑白名单 1.配置文件/etc/ssh/sshd_config部分参数解析 2.配置远程登录黑白名单 SSH用于计算机之间的加密登录,是一类

    2024年02月22日
    浏览(55)
  • Linux服务器常见运维性能测试(3)CPU测试super_pi、sysbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包