如何在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。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值