指定docker容器内存_docker容器资源配额控制之cpu

本文详细介绍了如何在Docker中进行CPU资源配额控制,包括未配置CPU资源配额时的情况,以及使用`cpuset-cpus`单独使用和与`cpu-shares`混合使用的方法。通过实例展示了如何限制容器使用特定CPU核心以及调整CPU份额。
摘要由CSDN通过智能技术生成

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

解决办法:

安装gcc依赖

yum install gcc -y

646d484717e01de61ea91b411d987d8b.png

make -j 4

报错:

bash: make: command not found

解决办法:

安装make

yum install -y make

d0c8ed724b7976fd44ed05ee9632bfa5.png

make install

523bb758d3e122f7b2b1394ae06243fb.png

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

这时候发现4颗cpu资源几乎全部耗尽!(如下图)

a43e099fd782310fa7212070ba95ed3b.png

开启cpu资源配额控制

cpuset-cpus命令单独使用

1、查看docker物理机的cpu信息

cat /proc/cpuinfo | grep processor

4cbb662488e57cbde71115e2d559717a.png

cat /proc/cpuinfo | grep processor | wc -l

cfaec8a68af4a8616cf9c27db66227d3.png

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

stress -c 4 -i 4 -t 2m

d361c0844579df1b386709a2d8d98712.png

测试结果:

物理机上只有0和1这两颗cpu资源被占用,2和3的cpu资源没有使用,说明限制成功!

db0a2779484e575e9ea9573fd78e18c4.png

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

4、测试结果

这时候可以发现cpu0和1全部被跑满,但是cpu2和3则未受影响;同样两个stress进程的比值也为1:2,说明cpu-shares设置也生效了!

4687340820d5819f7ae60e68dc5e44a5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值