linux cgroups详细介绍

Linux cgroups详细介绍

什么是cgroups

cgroups(control groups)是Linux内核提供的一种机制,它允许你限制、分配和监控系统资源(如CPU、内存、磁盘IO等)的使用。cgroups可以通过文件系统的形式,将一组进程放置在一个子系统中。

cgroups的应用场景

cgroups常用于以下场景:

  • 系统性能优化:通过控制资源的使用限制,可以防止进程对系统资源的滥用,防止系统崩溃等问题;
  • 服务管理:通过控制某一组进程可以使用的资源范围,可以保证服务的稳定性;
  • 可靠性解决方案:在多租户环境下使用cgroups,可以避免一个用户的资源使用情况影响其他用户的使用体验。

cgroups的实现

cgroups操作需要对操作系统内核的进程处理进行控制,因此cgroups的实现离不开内核对进程管理的处理。目前Linux内核中已经内置了cgroups子系统(以cgroups_v1为主)。

对于cgroups的实现,常用的cgroups子系统有:

  • blkio:控制块设备IO的限制,如硬盘和闪存;
  • cpuacct:使用cgroups的进程所消耗的CPU资源(cache、用户时间、系统时间)的统计;
  • cpu:对进程使用CPU限制和权重的控制;
  • devices:禁止特定类型的设备和允许特定设备访问的控制;
  • freezer:暂停和恢复cgroup中的所有进程;
  • memory:内存使用情况的控制和统计;
  • net_cls:为网络流量分类提供标记;

cgroups的基本操作

创建cgroup

基于内核版本的不同,cgroups相关的文件系统可能会存在差异。在本文中,我们以基于cgroups v1的文件系统示例来演示如何操作。

首先,我们需要选择一个cgroup子系统,这里选取cpu子系统作为示例:

$ mkdir /sys/fs/cgroup/cpu/test-cgroup

这个命令会在路径/sys/fs/cgroup/cpu中创建一个名为test-cgroup的cgroup。

限制资源使用

限制进程组的CPU使用率为50%:

$ echo 50000 > /sys/fs/cgroup/cpu/test-cgroup/cpu.cfs_quota_us
$ echo 100000 > /sys/fs/cgroup/cpu/test-cgroup/cpu.cfs_period_us

这条命令中,我们指定了test-cgroup子系统在进程组中最多只能利用50%的CPU时间。

进程加入cgroup

将一个进程加入cgroup:

$ echo <pid of process> > /sys/fs/cgroup/cpu/test-cgroup/tasks

例如,通过下面的命令将PID为123的进程加入test-cgroup子系统下的cgroup:

$ echo 123 > /sys/fs/cgroup/cpu/test-cgroup/tasks

监控cgroup

使用cgtop命令可以使用CPU、内存和网络方面的统计信息监控cgroup:

$ apt install -y libcgroup-tools
$ cgtop

这个命令可以显示出所有cgroups的所有进程的统计信息。

示例1:限制进程组的CPU使用

假设我们要运行shell脚本test.sh,同时要限制其所用的CPU使用,并将其加入名为test的cgroup。

首先,我们创建一个名为test的cgroup:

$ mkdir /sys/fs/cgroup/cpu/test

然后,我们限制test子系统在进程组中最多只能利用50%的CPU时间:

$ echo 50000 > /sys/fs/cgroup/cpu/test/cpu.cfs_quota_us
$ echo 100000 > /sys/fs/cgroup/cpu/test/cpu.cfs_period_us

接着,我们将脚本test.sh运行在名为test的cgroup下:

$ bash test.sh &
$ echo $! > /sys/fs/cgroup/cpu/test/tasks

这个命令行会在后台运行脚本test.sh,并将它的PID加入名为test的cgroup。现在,这个脚本的CPU使用率不会超过50%。

示例2:限制Docker容器的内存使用

我们还可以使用cgroups限制Docker容器的内存使用。例如,我们可以将一个名为test-container的Docker容器利用内存限制为2G:

$ docker run -itd --name test-container ubuntu:18.04 /bin/bash
$ cgcreate -g memory:/docker-test
$ echo $(( 2 * 1024 * 1024 * 1024 )) > /sys/fs/cgroup/memory/docker-test/memory.limit_in_bytes
$ echo $(docker inspect -f '{{.State.Pid}}' test-container) > /sys/fs/cgroup/memory/docker-test/tasks

这个命令运行了容器,并创建了一个名为docker-test的cgroup。这个cgroup限制了该容器的内存使用为2GB。最后,我们使用docker inspect取得容器的PID,并将其加入docker-test的cgroup。

这种方法也可以运用到限制其他资源(CPU、IO、网络等)的使用上。

总结

cgroups帮助我们管理Linux系统上进程的资源使用,使用cgroups可以实现进程级别的资源限制,提高系统的可用性及稳定性。本文介绍了cgroups的基本概念及其应用场景,并提供了两个例子来进一步说明如何使用cgroups操作系统相关资源。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux cgroups详细介绍 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Java编程经典小游戏设计-打砖块小游戏源码

    Java编程经典小游戏设计-打砖块小游戏源码是一个使用Java编写的小游戏,它的核心部分是基于Java的Swing和AWT库,同时也使用了Java的多线程技术。在这个小游戏中,游戏的主角是一个挥动球拍的玩家,他需要利用球拍反弹弹球并把砖块打碎以获取分数。在这个游戏中,玩家需要时刻保持注意力,才能在最短时间内打碎所有的砖块。 为了更好地理解这个小游戏的设计和实…

    other 2023年6月27日
    00
  • 详解Linux下你所不知道的7个SSH命令用法

    以下是“详解Linux下你所不知道的7个SSH命令用法”的完整攻略。 1. 使用ssh-copy-id命令实现无密码登录 使用ssh-copy-id命令可以在两台Linux服务器之间配置无需密码登录。在使用该命令之前,我们需要确保在两台服务器中都运行了SSH服务,并且我们拥有远程服务器的用户名和密码。 以下是使用ssh-copy-id命令实现无密码登录的步骤…

    other 2023年6月27日
    00
  • 支持向量机多分类matlab

    支持向量机多分类matlab 简介 支持向量机(Support Vector Machine, SVM)是一种广泛应用于分类、回归和离群点检测的机器学习算法。其优点在于可以有效地处理高维空间中的复杂数据,具有较高的分类准确度和泛化能力。本文将介绍如何在MATLAB中使用SVM进行多分类问题的建模和训练。 数据准备 在进行SVM多分类的建模和训练前,我们需要准…

    其他 2023年3月28日
    00
  • 变量声明时命名与变量作为对象属性时命名的区别解析

    变量声明时命名与变量作为对象属性时命名的区别解析 在JavaScript中,变量声明时的命名和变量作为对象属性时的命名有一些区别。本攻略将详细解释这两者之间的差异,并提供两个示例来说明。 变量声明时命名 在变量声明时,命名遵循一些规则和约定,以确保代码的可读性和一致性。以下是一些常见的命名规则: 变量名应该以字母、下划线或美元符号开头。 变量名可以包含字母、…

    other 2023年8月9日
    00
  • Win8.1系统开机出现“其他用户”账户怎么办?Win8.1开机出现“其他用户”的解决方法

    Win8.1系统开机出现“其他用户”账户问题解决方法 问题描述 在Windows 8.1系统中,有用户反映开机后出现“其他用户”账户,无法正常登录系统的情况。该问题可能由于系统设置、注册表等问题引起。 解决方法 以下是针对Win8.1系统开机出现“其他用户”账户问题的解决方法: 方法一:修改注册表 步骤如下: 按下Win+R键,打开运行窗口。 输入”rege…

    other 2023年6月27日
    00
  • Android实现自定义的卫星式菜单(弧形菜单)详解

    Android实现自定义的卫星式菜单(弧形菜单)详解 在Android应用中实现自定义的卫星式菜单(也称为弧形菜单)可以为用户提供一种独特的交互体验。本攻略将详细介绍如何实现这样的菜单,并提供两个示例说明。 步骤一:准备工作 在开始之前,确保你已经具备以下准备工作: Android开发环境的搭建和配置。 一个新的Android项目。 步骤二:创建自定义Vie…

    other 2023年8月21日
    00
  • tensorflow中的优化器解析

    TensorFlow中的优化器解析 概述 TensorFlow是一种常用的开源机器学习框架,它提供了多种优化器来帮助我们更好地训练模型。在本文中,我们将对TensorFlow中的常用优化器进行详细介绍,包括其基本原理和使用方法。 梯度下降法 (Gradient Descent) 梯度下降法是最基本的优化算法之一,其基本思想是通过迭代更新模型参数值,使得损失函…

    其他 2023年3月28日
    00
  • soul怎么查看IP地址?soul查看IP地址教程

    soul怎么查看IP地址? 要查看IP地址,您可以使用以下步骤: 打开soul应用程序:首先,您需要打开soul应用程序。您可以在您的设备上找到并点击soul应用程序的图标来启动它。 导航到设置页面:一旦您打开了soul应用程序,您需要导航到设置页面。通常,您可以在应用程序的底部导航栏或侧边栏中找到设置选项。点击设置选项以进入设置页面。 查找网络信息:在设置…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部