免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5131 | 回复: 15
打印 上一主题 下一主题

[系统管理] 关于Linux系统上cGroup的使用的一点疑问? [复制链接]

论坛徽章:
1
摩羯座
日期:2014-08-04 14:50:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-13 10:58 |只看该作者 |倒序浏览
我现在使用cGroup去对一个进程的资源进行控制,

1.如果进程起来后,再将pid加入到task文件中,结果是资源不受控;
2.如果把shell的pid先加入task中,然后在这个shell中启动要受控的进程,结果就可以达到资源受控的效果。

望有对cGroup机制了解的同学,帮忙解答一下我的疑惑。

论坛徽章:
0
2 [报告]
发表于 2012-11-13 12:48 |只看该作者
manual失败?
试试 libcgroup包里的cgexec/cgclassify

论坛徽章:
1
摩羯座
日期:2014-08-04 14:50:06
3 [报告]
发表于 2012-11-13 14:25 |只看该作者
回复 2# darrenlee3

1.用过cgclassify,这个命令是在进程起来后将pid加入task,调整资源控制参数,会不生效;
2.至于cgexec,这个到是可以生效,但是这个就相当于进程启动前就把握了主动权;

如果不能对一个现存的进程进行资源控制,那么cgclassify的存在是为了什么呢?

论坛徽章:
0
4 [报告]
发表于 2012-11-13 14:41 |只看该作者
kifast 发表于 2012-11-13 14:25
回复 2# darrenlee3

1.用过cgclassify,这个命令是在进程起来后将pid加入task,调整资源控制参数,会不 ...


我没太明白你的意思,cgroup就是predefine一些控制组,然后把进程加到适合的组里,已组为单位进行资源控制,并不是以进程为单位进行控制,肯定是先有某控制组和该组的控制参数,然后才有需要加入该组的进程

A control group is a collection of processes that are bound by the same criteria. These groups can be hierarchical, where each group inherits limits from its parent group. The kernel provides access to multiple controllers (subsystems) through the cgroup interface.

论坛徽章:
1
摩羯座
日期:2014-08-04 14:50:06
5 [报告]
发表于 2012-11-13 14:50 |只看该作者
回复 4# darrenlee3


   你说的没错,就是有了控制组,然后再将进程加入控制组,我现在只讨论只加入一个要控制的进程的情况,当然就是控制一个进程了。

主要就是加入的时机问题,能用cgexec加入一个尚未启动的,可以达到控制的效果;

但用cgclassify加入一个已经启动的进程,控制组对这个之前就已经启动的进程,无法达到通过调整参数控制资源。

谢谢你的耐心回复。

论坛徽章:
0
6 [报告]
发表于 2012-11-13 16:18 |只看该作者
本帖最后由 darrenlee3 于 2012-11-13 16:19 编辑
kifast 发表于 2012-11-13 14:50
回复 4# darrenlee3


可以达到效果,cgroup是立刻生效的
写个循环计算的是cpu 100%的程序或者内存泄漏的程序可以测出来

你是怎么测的?怎么算“生效”?

以cpu 100%的程序来说,在2核cpu上,程序启动2次产生2个进程,无论怎么设置cpu.shares,他们总是100%的占用率,一个进程占一个cpu
但如果此时再启动2个进程,cpu.shares就会生效,效果是按比例分配cpu带宽,cpu占用率也会和share值成比例。

论坛徽章:
1
摩羯座
日期:2014-08-04 14:50:06
7 [报告]
发表于 2012-11-13 20:56 |只看该作者
回复 6# darrenlee3


  嗯,你说的没错,对于CPU的限制,我知道为什么了,

主要是因为多线程程序,在Linux中,会吧进程中的线程也当作一个进程来处理,

当占用CPU资源的不是主线程时,将这个程序的PID加入tasks中,其实是没有限制那个真正耗CPU的线程的。

解决办法: 将已经启动的进程的PID放入cgroup.procs中,cgroup会自动将其所有线程放入tasks中。


不过,对于内存的限制,我目前还不知道是什么原因导致,对一个已经起来的进程,为什么无法限制住物理内存的占用。

论坛徽章:
1
摩羯座
日期:2014-08-04 14:50:06
8 [报告]
发表于 2012-11-13 22:05 |只看该作者
回复 6# darrenlee3


    ok,memory子系统的task migration,已经知道为什么不行了。

在内存控制的时候,

当一个进程起来时,默认会放到memory子系统的根目录中的tasks文件中,

对于将一个task从根目录group中迁移到另外一个自己定义的group时,默认的情况是,其charge并没有顺带一起带走。

此时,就需要把目标group中的memory.move_charge_at_immigrate置为1。从而开启内存控制子系统的task迁移特性。

论坛徽章:
0
9 [报告]
发表于 2014-07-01 10:44 |只看该作者
回复 7# kifast


    我遇到了跟楼主一样的问题,按照楼主的研究解决了,谢谢。呵呵

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
10 [报告]
发表于 2014-07-01 16:23 |只看该作者
虽然不是太明白, 但看上去好高级的样子.


不知道楼主这样做的目的是什么? 是否可以使用 虚拟机来解决呢?

那样的话, 是不是会更简单些呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP