位置: 编程技术 - 正文

linux cgroups详细介绍(cgi linux)

编辑:rootadmin

推荐整理分享linux cgroups详细介绍(cgi linux),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linuxch,linuxchgrp,linux crul,linuxchgrp,linuxchgrp,cgi linux,linux cgroup详解,linuxchgrp,内容如对您有帮助,希望把文章链接给更多的朋友!

从 2.6. 版本开始,linux 内核提供了一个叫做 cgroups(控制组)的特性。cgroups 就是 control groups 的缩写,用来对一组进程所占用的资源做限制、统计、隔离。也是目前轻量级虚拟化技术 lxc (linux container)的基础之一。每一组进程就是一个控制组,也就是一个 cgroup。cgroups 分为几个子系统,每个子系统代表一种设施或者说是资源控制器,用来调度某一类资源的使用,如 cpu 时钟、内存、块设备 等。在实现上,cgroups 并没有增加新的系统调用,而是表现为一个 cgroup 文件系统,可以把一个或多个子系统挂载到某个目录。如复制代码代码如下:mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu

就将 cpu 子系统挂载在了 /sys/fs/cgroup/cpu 。也可以在一个目录上挂载多个子系统,甚至全部挂载到一个目录也是可以的,不过我觉得,把每个子系统都挂载在不同目录会有更好的灵活性。用 mount|awk '$5=="cgroup" {print $0}' 可以看到当前挂载的控制组。用 cat /proc/cgroups 可以看到当前所有控制组的状态。下面这个脚本,可以把全部子系统各种挂载到各自的目录上去。复制代码代码如下:#!/bin/bash</p><p>cgroot="${1:-/sys/fs/cgroup}"subsys="${2:-blkio cpu cpuacct cpuset devices freezer memory net_cls net_prio ns perf_event}"</p><p>mount -t tmpfs cgroup_root "${cgroot}"for ss in $subsys; do mkdir -p "$cgroot/$ss" mount -t cgroup -o "$ss" "$ss" "$cgroot/$ss"done

看看那些目录里都有些啥,比如 ls 一下 /sys/fs/cgroup/cpu。复制代码代码如下:cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release taskscgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat release_agent

其中 “cpu.” 开头的就是这个子系统里特有的东西。其他的那些是每个子系统所对应目录里都有的。这些文件就是用来读取资源使用信息和进行资源限制的。要创建一个控制组,就在需要的子系统里创建一个目录即可。如 mkdir /sys/fs/cgroup/cpu/foo 就创建了一个 /foo 的控制组。在新建的目录里就会出现同样一套文件。在这个目录里,也一样可以继续通过创建目录来创建 cgroup。也就是说,cgroup 是可以和目录结构一样有层次的。对与每个子系统挂载点点目录,就相当于根目录。每一条不同的路径就代表了一个不同的 cgroup。在不同的子系统里,路径相同就代表了同一个控制组。如,在 cpu、memory 中都有 foo/bar 目录,就可以用 那 /foo/bar 来操作 cpu、memory 两个子系统。对于同一个子系统,每个进程都属于且只属于一个 cgroup,默认是在根 cgroup。层次结构方便了控制组的组织和管理,对于某些配置项来说,层次结构还和资源分配有关。另外,也可以修改某个目录的 owner ,让非 root 用户也能操作某些特定的安全组。

linux cgroups详细介绍(cgi linux)

cgroups 的设置和信息读取是通过对那些文件的读写来进行的。例如复制代码代码如下:# echo >/sys/fs/cgroup/cpu/foo/cpu.shares就把 /foo 这个控制组的 cpu.shares 参数设为了 。

前面说,有些文件是每个目录里共有的。那些就是通用的设置。其中,tasks 和 cgroups.procs 是用来管理控制组中的进程的。要把一个进程加入到某个控制组,把 pid 写入到相应目录的 tasks 文件即可。如复制代码代码如下:# echo >/sys/fs/cgroup/cpu/foo/tasks就把 进程加入到了 /foo 控制组。那么 tasks 和 cgroups.procs 有什么区别呢?前面说的对“进程”的管理限制其实不够准确。系统对任务调度的单位是线程。在这里,tasks 中看到的就是线程 id。而 cgroups.procs 中是线程组 id,也就是一般所说的进程 id 。将一个一般的 pid 写入到 tasks 中,只有这个 pid 对应的线程,以及由它产生的其他进程、线程会属于这个控制组,原有的其他线程则不会。而写入 cgroups.procs 会把当前所有的线程都加入进去。如果写入 cgroups.procs 的不是一个线程组 id,而是一个一般的线程 id,那会自动找到所对应的线程组 id 加入进去。进程在加入一个控制组后,控制组所对应的限制会即时生效。想知道一个进程属于哪些控制组,可以通过 cat /proc/<pid>/cgroup 查看。

要把进程移出控制组,把 pid 写入到根 cgroup 的 tasks 文件即可。因为每个进程都属于且只属于一个 cgroup,加入到新的 cgroup 后,原有关系也就解除了。要删除一个 cgroup,可以用 rmdir 删除相应目录。不过在删除前,必须先让其中的进程全部退出,对应子系统的资源都已经释放,否则是无法删除的。

前面都是通过文件系统访问方式来操作 cgroups 的。实际上,也有一组命令行工具。

lssubsys -am 可以查看各子系统的挂载点,还有一组“cg”开头的命令可以用来管理。其中 cgexec 可以用来直接在某些子系统中的指定控制组运行一个程序。如 cgexec -g "cpu,blkio:/foo" bash 。其他的命令和具体的参数可以通过 man 来查看。

下面是个 bash 版的 cgexec,演示了 cgroups 的用法,也可以在不确定是否安装命令行工具的情况下使用。复制代码代码如下:#!/bin/bash</p><p># usage: # ./cgexec.sh cpu:g1,memory:g2/g sleep </p><p>blkio_dir="/sys/fs/cgroup/blkio"memory_dir="/sys/fs/cgroup/memory"cpuset_dir="/sys/fs/cgroup/cpuset"perf_event_dir="/sys/fs/cgroup/perf_event"freezer_dir="/sys/fs/cgroup/freezer"net_cls_dir="/sys/fs/cgroup/net_cls"cpuacct_dir="/sys/fs/cgroup/cpuacct"cpu_dir="/sys/fs/cgroup/cpu"hugetlb_dir="/sys/fs/cgroup/hugetlb"devices_dir="/sys/fs/cgroup/devices"</p><p>groups="$1"shift</p><p>IFS=',' g_arr=($groups)for g in ${g_arr[@]}; do IFS=':' g_info=($g) if [ ${#g_info[@]} -ne 2 ]; then echo "bad arg $g" >&2 continue fi g_name=${g_info[0]} g_path=${g_info[1]} if [ "$g_path" == "${g_path#/}" ]; then g_path="/$g_path" fi echo $g_name $g_path var="${g_name}_dir" d=${!var} if [ -z "$d" ]; then echo "bad cg name $g_name" >&2 continue fi path="${d}${g_path}" if [ ! -d "$path" ]; then echo "cg not exists" >&2 continue fi echo "$$" >"${path}/tasks"done</p><p>exec $*cgroups 中的东西很多,本来打算只写一篇的,后来觉着还是分成几篇说得更明白些。之后还会写一些具体使用的东西。

Linux中使用cgroups限制cpu资源实例 这回说说怎样通过cgroups来管理cpu资源。先说控制进程的cpu使用。在一个机器上运行多个可能消耗大量资源的程序时,我们不希望出现某个程序占据了所

Linux中使用cgroups控制内存资源介绍 cgroups中有个memory子系统,用于限制和报告进程的内存使用情况。其中,很明显有两组对应的文件,一组带memsw,另一组不带复制代码代码如下:memory.failcn

Linux中使用cgroups管理进程磁盘io介绍 linux的cgroups还可以限制和监控进程的磁盘io。这个功能通过blkio子系统实现。blkio子系统里东西很多。不过大部分都是只读的状态报告,可写的参数就只

标签: cgi linux

本文链接地址:https://www.jiuchutong.com/biancheng/357046.html 转载请保留说明!

上一篇:linux之sed用法 (linux中sed)

下一篇:Linux中使用cgroups限制cpu资源实例(linux中使用什么命令可以把两个文件合并)

  • 增值税加计抵减政策10%和15%
  • 玉米大量收购
  • 工程施工企业收入确认成本结转案例
  • 六税两费减半征收政策
  • 小规模按季申报 月销售收入不超过
  • 金蝶软件制造费用结转步骤
  • 全资收购企业需要交税吗
  • 个税app抵扣多少钱怎么查询
  • 融资租赁设备增值税怎样抵扣
  • 购销行为的帐务处理如何做?
  • 年度结转之前需要做什么
  • 建筑施工企业检查的内容包括什么
  • 未计提企业所得税怎么写分录
  • 以现金形式发工资的说明范文
  • 租赁车辆维修费谁承担
  • 物业管理提供的服务变化
  • 营业收入在财务报表上跟实际多出来怎么解释
  • 调整以前年度应交税费分录
  • 2021年购买车辆的进项税能抵扣吗
  • 发生工伤事故先怎么办
  • 进货价加多少卖不亏增值税
  • 购买现金支票的扣费方式
  • 外资股东是什么意思
  • 三星笔记使用攻略
  • win10怎么手动修改时间
  • macbook和ipad怎么互通屏幕
  • 权益法分红的会计分录
  • 鼠标灯亮但是鼠标失灵
  • 融资租赁货车
  • 下列关于企业发生的税费说法正确的是
  • 税款滞纳金会计科目
  • 代开的增值税怎么计提?
  • 艾草的功效与作用洗头
  • axios怎么使用
  • PHP:mcrypt_enc_get_algorithms_name()的用法_Mcrypt函数
  • 生产型企业出口不是自己生产的东西
  • 长期借款账务处理会计分录怎么写
  • python中如何读取列表中的指定
  • 劳动仲裁要出钱吗
  • 物业费少交点,有什么理由
  • 差旅费取得发票怎么处理
  • 计提工资大于实发工资企业所得税怎么算
  • 二房东可以卖房吗
  • 什么叫日常业务
  • 小规模纳税人适用5%的税率是什么
  • ibps对公提回贷记有什么影响
  • 房地产公司收房款怎么分录
  • 个人独资企业需要缴纳哪些税种
  • 企业购买的汽车可以抵税吗
  • 上年度固定资产费用化了,财报怎么算
  • 其他业务收入怎么申报增值税
  • 收到银行借款并存入银行会计分录
  • Mysql 数据库 拷贝 原文件
  • Linux下MySQL 5.6.27 安装教程
  • win8.1系统升级win10
  • windows active directory功能
  • win10rs2是哪个版本
  • xp系统怎么调出任务管理器
  • linux中字符设备有哪些
  • 快速解决便秘的小妙招
  • 外国电影怎么看双语的
  • win8突然没有声音
  • bat脚本延迟执行命令
  • 如何使用朋友的山姆卡
  • expressjs中文
  • android:ellipsize="marquee"
  • 置顶语句子
  • js数组添加元素的方法
  • js引用传递
  • ECMAScript5(ES5)中bind方法使用小结
  • js脚本使用教程
  • 广西地税局局长
  • 上海个人所得税优惠政策
  • 杭州电子税务局注册流程
  • 深圳小微企业税收优惠政策2023
  • 湖北税务报税系统官网
  • 出口汇率以什么为准
  • 网上税务局网址
  • 政府收回土地条件
  • 杭州金税盘客服电话是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设