实验环境:centos 6.10

1.安装libcgroup

yum install -y libcgroup

2.进入资源控制器默认挂载目录/cgroup

[root@hadoop1 cgroup]# cd /cgroup/
[root@hadoop1 cgroup]# ll
total
drwxr-xr-x. root root Nov : blkio
drwxr-xr-x. root root Nov : cpu
drwxr-xr-x. root root Nov : cpuacct
drwxr-xr-x. root root Nov : cpuset
drwxr-xr-x. root root Nov : devices
drwxr-xr-x. root root Nov : freezer
drwxr-xr-x. root root Nov : memory
drwxr-xr-x. root root Nov : net_cls

3.创建两个测试脚本,use_cpu.sh模拟使用cpu的进程,use_mem.sh模拟使用内存的进程

[root@hadoop1 cgroup]# ll
total
drwxr-xr-x. root root Nov : blkio
drwxr-xr-x. root root Nov : cpu
drwxr-xr-x. root root Nov : cpuacct
drwxr-xr-x. root root Nov : cpuset
drwxr-xr-x. root root Nov : devices
drwxr-xr-x. root root Nov : freezer
drwxr-xr-x. root root Nov : memory
drwxr-xr-x. root root Nov : net_cls
-rwxr-xr-x. root root Nov : use_cpu.sh
-rwxr-xr-x. root root Nov : use_mem.sh [root@hadoop1 cgroup]# cat use_cpu.sh
#!/bin/bash
x=0
while [ true ]; do
x=$x+1
done;
[root@hadoop1 cgroup]# cat use_mem.sh
#!/bin/bash
x="a"
while [ true ];do
x=$x$x
done;

4.直接运行脚本,分别查看cpu和内存的使用情况

[root@hadoop1 cgroup]# nohup ./use_cpu.sh &
[]
[root@hadoop1 cgroup]# nohup: ignoring input and appending output to `nohup.out'
[root@hadoop1 cgroup]# top
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 7817 root      20   0  103m 1724 1148 R 100.0  0.1   0:52.89 use_cpu.sh 
[root@hadoop1 cgroup]# kill -9 7817

 [root@hadoop1 cgroup]# nohup ./use_mem.sh &
  [3] 7822
  [root@hadoop1 cgroup]# nohup: ignoring input and appending output to `nohup.out'

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

 7822 root      20   0 2151m 1.3g 1132 R 100.0 73.3   1:04.15 use_mem.sh

可以看到,cpu使用量几乎达到100%,内存使用量在不断增长,截图为止显示为73.3M。

5.创建一个cpu控制组,然后在其中运行任务,使用top观察结果

[root@hadoop1 cpu]# cgcreate -g cpu:foo
[root@hadoop1 cpu]# echo > foo/cpu.cfs_quota_us # cpu.cfs_period_us中的值为100000,配置50000即使用50%
[root@hadoop1 cgroup]# cgexec -g cpu:foo nohup ./use_cpu.sh &
[]
[root@hadoop1 cgroup]# nohup: ignoring input and appending output to `nohup.out'
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7832 root 20 0 103m 1500 1148 R 49.9 0.1 0:16.01 use_cpu.sh
root S 0.3 0.0 :01.96 jbd2/dm--
root S 0.0 0.0 :02.84 init
root S 0.0 0.0 :00.01 kthreadd
root RT S 0.0 0.0 :00.03 migration/

可以看到,测试进程使用了约50%的cpu。同理测试控制内存,分配10M给进程组

[root@hadoop1 cgroup]# cgcreate -g memory:foo
[root@hadoop1 cgroup]# echo > memory/foo/memory.limit_in_bytes
[root@hadoop1 cgroup]# cgexec -g memory:foo nohup ./use_mem.sh &
[]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root 871m 11m R 87.1 0.6 :07.82 use_mem.sh

计算可知,测试进程大约使用了10M内存

利用cgroup控制进程使用的资源(cpu、内存等)的更多相关文章

  1. 性能优化之基础资源cpu&内存(JVM)

    本章主要介绍计算机的一些基础资源以及操作系统处理后的一些基础资源. 主要包括 cpu 内存 磁盘 网络 线程 本章会介绍这些资源的一些原理,介绍如何查看资源的数量,使用情况,对性能和整体计算机执行的一 ...

  2. Linux下利用CGroup控制CPU、内存以及IO的操作记录

    CGroup及其子系统的介绍在这里就不赘述了,可以参考:Linux下CGroup使用说明梳理废话不多说,这里记录下利用CGroup控制CPU.内存以及IO的操作记录: libcgroup工具安装这里以 ...

  3. linux的cgroup控制

    cgroup:control group-控制群组:将用户(的进程)加入某个群组(又叫控制器controller), 通过 指定群组对资源-cpu 内存 network等的使用,来限制用户对计算机资源 ...

  4. 利用 cgroup 的 cpuset 控制器限制进程的 CPU 使用

    最近在做一些性能测试的事情,首要前提是控制住 CPU 的使用量.最直观的方法无疑是安装 Docker,在每个配置了参数的容器里运行基准程序. 对于计算密集型任务,在只限制 CPU 的需求下,直接用 L ...

  5. [daily][cgroup] 使用cgroup限制进程的CPU占用

    参考: https://segmentfault.com/a/1190000008323952 1. 找到cgroup设置的地方. [root@D128 ~]# mount -l |grep cpu ...

  6. Linux下如何查看哪些进程占用的CPU内存资源最多

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  7. 操作系统--进程管理1--单个CPU情况

    1.进程概念 进程:一个正在执行的程序:操作系统提出进程概念目的:是为了跟踪程序在执行期间的状态.而程序只是一段代码,是一个静态的概念 无法准确描述程序执行时候发生的一切.程序代码被加载进内存后就以进 ...

  8. linux进程、线程与cpu的亲和性(affinity)

    参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...

  9. curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,

    cURL > Docs > Tutorial:  http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...

随机推荐

  1. redux sample with slim redux source code

    code sample没有package.json文件,也就没有任何外部依赖,直接使用slim redux source code. slim resux只有90多行. nodejs对es6的impo ...

  2. C#反射Assembly 详细说明,有项目例子

    1.对C#反射机制的理解2.概念理解后,必须找到方法去完成,给出管理的主要语法3.最终给出实用的例子,反射出来dll中的方法 反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等 ...

  3. C++学习之拷贝构造函数篇

    一.拷贝构造函数的声明 Array(const Array & arr); 二.拷贝构造函数的实现分为两种,即是深拷贝和浅拷贝. 1.浅拷贝 代码例如以下: class Array { pub ...

  4. python urllib2导出elasticsearch数据时 返回 "urllib2.HTTPError: HTTP Error 500: Internal Server Error"

    0.业务场景 将ES中某个index的某个字段的所有数据,导出到文件中 1.ES数据导出方法简述 ES数据导出方法,我主要找到了以下几个方面,欢迎大家补充: ES官方API:snapshot and ...

  5. Social Network 社交网络分析

    Social Network 社交网络分析 一:什么是SNA-社交网络分析 社交网络分析的威力何在?我想几个案例来说明. 案例1:对一个毫无了解的组织(这个组织可以是一个公司,亦或是一个组织),如果能 ...

  6. 【转】JavaScript和Java的区别

    虽然JavaScript与Java有紧密的联系,但却是两个公司开发的不同的两个产品.      Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于Internet 应用程序开发:而Ja ...

  7. 面试题思考:BS与CS的区别与联系

    简单的理解: bs是浏览器(browser)和服务器(server) cs是静态客户端程序(client)和服务器(server) 区别在于,虽然同样是通过一个程序连接到服务器进行网络通讯,但是bs结 ...

  8. JS制作一个通用的商城版历史浏览记录

    正在开发一个b2c的国外商城,昨天做了一个历史浏览记录发出来跟大家分享一下. JS: //cookie相关函数 function getCookieVal(offset) {    var endst ...

  9. :nohlsearch

    vim 编辑器 ——黄色阴影的消除问题 - leikun153的博客 - CSDN博客 https://blog.csdn.net/leikun153/article/details/78903597 ...

  10. 如何在 window 上面输入特殊字符?

    打开 字符映射表 程序 选中任意一个字符,它会在下方显示该字符的 16进制 转换16进制至10进制,并在输入法打开的状态下,按住 Alt 键输入 10 进制数值即可.