利用cgroup控制进程使用的资源(cpu、内存等)
实验环境: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、内存等)的更多相关文章
- 性能优化之基础资源cpu&内存(JVM)
本章主要介绍计算机的一些基础资源以及操作系统处理后的一些基础资源. 主要包括 cpu 内存 磁盘 网络 线程 本章会介绍这些资源的一些原理,介绍如何查看资源的数量,使用情况,对性能和整体计算机执行的一 ...
- Linux下利用CGroup控制CPU、内存以及IO的操作记录
CGroup及其子系统的介绍在这里就不赘述了,可以参考:Linux下CGroup使用说明梳理废话不多说,这里记录下利用CGroup控制CPU.内存以及IO的操作记录: libcgroup工具安装这里以 ...
- linux的cgroup控制
cgroup:control group-控制群组:将用户(的进程)加入某个群组(又叫控制器controller), 通过 指定群组对资源-cpu 内存 network等的使用,来限制用户对计算机资源 ...
- 利用 cgroup 的 cpuset 控制器限制进程的 CPU 使用
最近在做一些性能测试的事情,首要前提是控制住 CPU 的使用量.最直观的方法无疑是安装 Docker,在每个配置了参数的容器里运行基准程序. 对于计算密集型任务,在只限制 CPU 的需求下,直接用 L ...
- [daily][cgroup] 使用cgroup限制进程的CPU占用
参考: https://segmentfault.com/a/1190000008323952 1. 找到cgroup设置的地方. [root@D128 ~]# mount -l |grep cpu ...
- Linux下如何查看哪些进程占用的CPU内存资源最多
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...
- 操作系统--进程管理1--单个CPU情况
1.进程概念 进程:一个正在执行的程序:操作系统提出进程概念目的:是为了跟踪程序在执行期间的状态.而程序只是一段代码,是一个静态的概念 无法准确描述程序执行时候发生的一切.程序代码被加载进内存后就以进 ...
- linux进程、线程与cpu的亲和性(affinity)
参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...
- curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,
cURL > Docs > Tutorial: http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...
随机推荐
- 【BZOJ】1665: [Usaco2006 Open]The Climbing Wall 攀岩(spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=1665 这题只要注意到“所有的落脚点至少相距300”就可以大胆的暴力了. 对于每个点,我们枚举比他的x ...
- redis php 实例二
前面一篇博客主要是string类型,list类型和set类型,下面hash类型和zset类型 1,hset 描述:将哈希表key中的域field的值设为value.如果key不存在,一个新的哈希表被创 ...
- library和libraryTarget使用场景组件开发
https://segmentfault.com/q/1010000004676608 https://github.com/zhengweikeng/blog/issues/10
- js事件处理函数中return的作用
这里面的return含有一些细节知识: 例如:onClick='return add_onclick()'与 onClick='add_onclick()'的区别 JAVASCRIPT在事件中调用函数 ...
- iOS - 导航栏UINavigationController经常使用属性
1.设置导航栏标题 self.title = @"dylan_李伟宾"; 2.设置导航栏样式 设置方法: [self.navigationController.navigation ...
- 模拟ORA-26040: Data block was loaded using the NOLOGGING option
我们知道通过设置nologging选项.能够加快oracle的某些操作的运行速度,这在运行某些维护任务时是非常实用的,可是该选项也非常危急,假设使用不当,就可能导致数据库发生ORA-26040错误. ...
- Python创建数组
1 创建数组 array函数 >>> a=([1,2],[3,4]) >>> array(a) array([[1, 2], [3, 4]]) arange函数: ...
- poj1699(状态压缩dp)
可能没有完全读懂题意. 个人觉得 acca aa 答案应该是4. 然后就是dp了..这题数据量小很多方法都可以,数据也水暴力据说都能过.. 还有就是我竟然没有用扩展kmp优化下... 太无耻了,我是因 ...
- EF 更新操作 lambda解释+=
我曾写过一个EF批量更新.删除的博客,后来操作的过程中经常遇到更新字段,但是要在原来的基础上计算的情况,我就先去获取一遍数据然后再计算,最后再去更新,显然这个操作是很复杂的 var guest = d ...
- Understanding Tensorflow using Go
原文: https://pgaleone.eu/tensorflow/go/2017/05/29/understanding-tensorflow-using-go/ Tensorflow is no ...