docker容器资源配额控制之cpu
未做cpu资源配额控制前
1、使用docker.io/centos(官方镜像)启动并进入一个容器
docker run -ti 1e1148e4cc2c /bin/bash
2、在该容器中编译安装stress硬件性能压力测试工具
下载stress
yum install -y wget
wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
编译安装该软件
tar zxvf stress-1.0.4.tar.gz
rm -fr stress-1.0.4.tar.gz
cd stress-1.0.4/
./configure
报错:
[root@4602a294419b stress-1.0.4]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... no
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/stress-1.0.4':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
![3e592984179b101ee643158dff4b8655.png](https://i-blog.csdnimg.cn/blog_migrate/b911e8c9509cbd90622984b27efa441b.jpeg)
解决办法:
安装gcc依赖
yum install gcc -y
![646d484717e01de61ea91b411d987d8b.png](https://i-blog.csdnimg.cn/blog_migrate/7a13357836333c6dd30a6b810a054b27.jpeg)
make -j 4
报错:
bash: make: command not found
解决办法:
安装make
yum install -y make
![d0c8ed724b7976fd44ed05ee9632bfa5.png](https://i-blog.csdnimg.cn/blog_migrate/d743fa682519eccb98276ba4820b2d83.jpeg)
make install
![523bb758d3e122f7b2b1394ae06243fb.png](https://i-blog.csdnimg.cn/blog_migrate/2dad097c30db8eacb5eb51241305a839.jpeg)
stress参数解释
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n 显示已完成的指令情况
-t --timeout N 指定运行N秒后停止
--backoff N 等待N微妙后开始运行
-c 产生n个进程 每个进程都反复不停的计算随机数的平方根,测试cpu
-i 产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上,测试io
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数 ,测试内存
--vm-bytes B 指定malloc时内存的字节数 (默认256MB)
--vm-hang N 指定在free栈的秒数
-d --hadd n 产生n个执行write和unlink函数的进程
--hadd-bytes B 指定写的字节数
--hadd-noclean 不unlink
3、压力测试
因为docker的物理机有4颗cpu,所以使用stress压力测试工具同时测试4颗cpu
stress -c 4 -i 4 -t 1m
![c6561f8d71804e4ab422dd74800700d4.png](https://i-blog.csdnimg.cn/blog_migrate/2e926f0e3da5d0e1afd700880b26fe4f.jpeg)
这时候发现4颗cpu资源几乎全部耗尽!(如下图)
![a43e099fd782310fa7212070ba95ed3b.png](https://i-blog.csdnimg.cn/blog_migrate/6e4da930fb9e80bcac4fe600c6c84a1a.jpeg)
开启cpu资源配额控制
cpuset-cpus命令单独使用
1、查看docker物理机的cpu信息
cat /proc/cpuinfo | grep processor
![4cbb662488e57cbde71115e2d559717a.png](https://i-blog.csdnimg.cn/blog_migrate/02db3d54ed4c107cdbfd47fc07ae49c1.jpeg)
cat /proc/cpuinfo | grep processor | wc -l
![cfaec8a68af4a8616cf9c27db66227d3.png](https://i-blog.csdnimg.cn/blog_migrate/1c133264d4e10cc097b6a80b25edff83.jpeg)
2、使用docker.io/centos镜像启动一个名称为centos-1的容器,并限制该容器之使用0和1这两颗cpu
docker run -it --name centos-1 --cpuset-cpus 0-1 docker.io/centos /bin/bash
3、安装stress
该步骤和上一章"未做cpu资源配额控制前"的第二小节一致,这里就不在累述了!
4、压力测试
stress -c 2 -i 2 -t 2m
![59d8d5aee9f75ed6d112d95a60708669.png](https://i-blog.csdnimg.cn/blog_migrate/f9e3da071c6b60e73804a10495e15f1b.jpeg)
stress -c 4 -i 4 -t 2m
![d361c0844579df1b386709a2d8d98712.png](https://i-blog.csdnimg.cn/blog_migrate/b5e5e823745a3a8b8fb2066f4e54d979.jpeg)
测试结果:
物理机上只有0和1这两颗cpu资源被占用,2和3的cpu资源没有使用,说明限制成功!
![db0a2779484e575e9ea9573fd78e18c4.png](https://i-blog.csdnimg.cn/blog_migrate/00f0ee861b0ceabfd7aeed4dd8271950.jpeg)
cpuset-cpus和cpu-shares混合使用
1、分别使用docker.io/centos镜像启动centos-2和centos-3两个容器,其中centos-2的cpu-shares为512,centos-3的cpu-shares为1024
docker run -it --name centos-2 --cpuset-cpus 0-1 --cpu-shares 512 docker.io/centos /bin/bash
docker run -it --name centos-3 --cpuset-cpus 0-1 --cpu-shares 1024 docker.io/centos /bin/bash
2、在centos-2和centos-3上分别安装stress
步骤略
3、分别在centos-2和centos-3上运行stress命令
stress -c 2 -v -t 2m
![7f0bf2b9b4a75da1c5468a0500b7cdf4.png](https://i-blog.csdnimg.cn/blog_migrate/e7b6576087c1d465980fe8c754239021.jpeg)
4、测试结果
这时候可以发现cpu0和1全部被跑满,但是cpu2和3则未受影响;同样两个stress进程的比值也为1:2,说明cpu-shares设置也生效了!
![4687340820d5819f7ae60e68dc5e44a5.png](https://i-blog.csdnimg.cn/blog_migrate/de276e7589c76bb77ef713bdc3f66a90.jpeg)