如何在Linux上通过cgroup限制一个进程使用CPU和内存

这篇具有很好参考价值的文章主要介绍了如何在Linux上通过cgroup限制一个进程使用CPU和内存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Cgroup(Control Group)是 Linux 内核的一个功能,可以通过它来限制进程的 CPU 和内存占用。Cgroup 实现了对系统资源的细粒度控制和管理,可以将一组进程放入同一个 Cgroup 中,并对该 Control Group 中的所有进程共享相应的资源配额。

下面举个实际的例子,演示如何使用 Cgroup 限制一个进程的 CPU 占用率和内存使用量:

1. 首先需要安装 cgroup 工具包,在 Ubuntu 系统上可以执行以下命令进行安装: 

sudo apt-get install cgroup-bin cgmanager libcgroup-dev

2. 创建一个名为 mycg 的控制组,以限制该组中的进程的 CPU 占用率和内存使用量。在 shell 终端输入下列命令:

sudo mkdir /sys/fs/cgroup/cpu_mytainer
sudo mkdir /sys/fs/cgroup/memory_mytainer

3. 设置 cpu 资源限制:

echo "10000" > /sys/fs/cgroup/cpu_mytainer/cpu.cfs_quota_us #设置每10ms分配给cgroup桶的最大时间片值 
echo "200000" > /sys/fs/cgroup/cpu_mytainer/cpu.cfs_period_us #设置每次时间轮转过多少微秒 


    这两行代码告诉内核同时运行的程序切换超时参数,即当前可占用 10ms 内核时间,然后必须让出时间,并等待 200ms 内核时间过后再占用,以达到限制CPU使用的目地。
    
4. 设置memory资源限制:

echo "50M" > /sys/fs/cgroup/memory_mytainer/memory.limit_in_bytes #设置cgroup总共最多能够使用内存大小

这条命令表示限制 mycg 这个 Cgroup 的进程总占用内存不得超过 50MB。 

5. 创建一个新进程并将它加入 mycg 中,然后观察该进程利用率是否受到限制。例如我们创建一个死循环```c++

#include <stdio.h>

int main()
{
    while(1){
        int a=100000000,b;
        b=a/b;
    }
    return 0;
}


编译成可执行文件 test.out 并运行如下代码:

sudo cgcreate -a root:root -g cpu_mytainer,memory_mytainer:/mycg  
sudo echo $PID >>/sys/fs/cgroup/cpu_mytainer/tasks 
sudo echo $PID >>/sys/fs/cgroup/memory_mytainer/tasks  

其中 PID 是指上面循环程序 test.out 的进程 ID。

6. 使用 `ps` 命令检查进程的CPU和内存使用情况:
 

ps aux | grep test.out

你可以看到产生了类似以下的输出:
 

USER      PID    %CPU     %MEM            VSZ         RSS       TTY     STAT      START         TIME        COMMAND
root     3833    10.0     0.1           62820        2580   pts/9    R     11:56         00:00:30     ./test.out

说明测试程序的CPU使用率已经被成功限制在10%以内,而内存占用不会超过50MB。文章来源地址https://www.toymoban.com/news/detail-614452.html

到了这里,关于如何在Linux上通过cgroup限制一个进程使用CPU和内存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux如何查看当前占用CPU和内存最多的进程

    查看占用 CPU 最高的前10个进程 查看占用内存(MEM)最高的前10个进程 输入 top 命令,然后按下大写M按照内存MEM排序,按下大写P按照CPU排序

    2024年02月17日
    浏览(37)
  • 使用cgroup工具对服务器某些/全部用户进行计算资源限制

    主要介绍,如何对指定/所有用户进行资源限定(这里主要介绍cpu和内存占用限制),防止某些用户大量占用服务器计算资源,影响和挤占他人正常使用服务器。 安装 cgroup 管理工具 使用 mount -t cgroup 命令检查验证 可以通过编写 /etc/cgconfig.conf 和 /etc/cgrules.conf 文件进行计算资

    2024年02月10日
    浏览(30)
  • 【Linux】Linux突然发现CPU占用100%该怎么办?如何排查进程(带你一文解决)

    目录 Linux的CPU发现占用率100%,一般会由什么情况引起? 1、进程负载过高: 2、错误配置的服务或应用程序: 3、恶意软件或病毒: 4、不良硬件或驱动程序: 5、系统内核问题: 6、CPU过热: 对于排查CPU占用率过高的原因,可以采取以下步骤和工具: 一、top/htop方法 1、使用

    2024年02月08日
    浏览(30)
  • ubuntu 如何在docker容器内部查看允许使用的cpu详细信息以及管理员是否限制了docker容器可使用的cpu核心范围

    如题。最近在跑强化学习代码,发现自己的代码跑的好慢好慢好慢,怀疑是可使用的cpu数量被管理员限制了,于是去学习了一下如何查看docker容器中cpu的相关信息。 这将输出关于系统处理器的详细信息,包括每个 CPU 的数量、型号和速度。 在 Docker 容器中,默认情况下,可以

    2024年02月13日
    浏览(37)
  • 【如何使用getrusage获取消耗的CPU时间和进程使用的最大物理内存】

    getrusage 是一个用于获取系统资源使用情况的函数,它在 Unix 和类 Unix 系统中可用。要使用它,你需要包含 sys/resource.h 头文件。下面是一个简单的 C++ 示例程序,用于获取进程的资源使用情况: 使用 RUSAGE_SELF 常量,表示获取当前进程的资源使用情况。你可以根据需要使用其他

    2023年04月23日
    浏览(35)
  • 【linux】服务器CPU占用50%,top/htop/ps却看不到异常进程?使用unhide可以查看!

    htop发现前32个核全被占满了,但是却找不到对应进程号 sysdig -c topprocs_cpu 发现CPU占用3143.28%,因为是32核,平均每核就是接近100% sysdig -c topprocs_cpu ,可以发现病毒进程号 检查 /etc/sysctl.conf 如果该文件只有一行 fs.file-max = =2097152 则大概率被隐藏 文件 / 进程 类病毒感染,注释掉

    2024年02月03日
    浏览(36)
  • 服务器的cpu如何通过脚本让其使用率变高

          最近遇到公司项目上线,在进行红蓝线查验时,由于部分服务器的配置高,但是使用率低,所以需要降配。为了避免降配,如何提高内存和cpu使用率呢?      可以通过脚本来实现。当前的服务器操作系统版本:redhat-7_5。      通过xshell连接服务器后,登录账户。  

    2024年02月04日
    浏览(43)
  • Docker中如何限制容器可用的 CPU

    默认情况下容器可以使用的主机 CPU 资源是不受限制的。和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难。本文将介绍如何限制容器可以使用的 CPU 资源。

    2024年02月09日
    浏览(35)
  • 500行代码手写docker-实现硬件资源限制cgroups

    本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: 之前我们对容器的网络命

    2024年02月06日
    浏览(28)
  • linux中cgroup的简单使用

    Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在

    2024年02月14日
    浏览(23)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包