linux查看容器的cpu,docker容器资源配额控制之cpu

taskset命令

taskset设定cpu亲和力,task能够将一个或多个进程绑定到一个或多个处理器上运行。

参数:

-c,--cpu-list 以列表格式显示和指定 cpu

-p,--pid 在已经存在的 pid 上操作

设置只在1和2号cpu运行sshd进程程序

b7f016808a7bf07ac61bc0ab763b1b22.png

[root@apenglinux-002 ~]# taskset -cp 1,2 914

pid 914's current affinity list: 0-3

pid 914's new affinity list: 1,2

查看id为1的进程在哪个cpu上运行

[root@apenglinux-002 ~]# taskset -cp 1

pid 1's current affinity list: 0-3

设置 nginx cpu亲和力

在 conf/nginx.conf 中,有如下一行:

worker_processes 1;

这里用来配置nginx启动几个工作进程,默认为1.而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定cpu。如下配置:

worker_processes 3;

worker_cpu_affinity 0010 0100 1000

这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。

重启nginx后,3个工作进程就可以各自用各自的cpu了。

物理机一共用16个核心,创建的容器只能用0、1、2这三个内核

[root@apenglinux-002 ~]# docker run -itd --name cpu1 --cpuset-cpus 0-2 centos

eefe1ff3e567082c2d2d888911b239cfdc3407230f6c727ead05dfcf13368406

[root@apenglinux-002 ~]# cat /sys/fs/cgroup/cpuset/docker/eefe1ff3e567082c2d2d888911b239cfdc3407230f6c727ead05dfcf13368406/cpuset.cpu

cpuset.cpu_exclusive cpuset.cpus

[root@apenglinux-002 ~]# cat /sys/fs/cgroup/cpuset/docker/eefe1ff3e567082c2d2d888911b239cfdc3407230f6c727ead05dfcf13368406/cpuset.cpus

0-2

进入容器测试

通过docker exec taskset -c -p 1(容器内部第一个进程编号一般为1),可以看到容器中进程与cpu内核的绑定关系,可以认为达到了绑定cpu内核的目的。

[root@apenglinux-002 ~]# docker exec cpu1 taskset -cp 1

pid 1's current affinity list: 0-2

cpu配额控制参数的混合使用

在上面这些参数中,cpu-shares控制只发生在容器竞争同一个内核的时间片时,如果通过cpuset-cpus指定容器A使用内核0,容器B只是用内核1,在主机上只有这两个容器使用对应内核的情况,它们各自用全部的内核资源,cpu-shares没有明显效果。

cpu-period、cpu-quota这两个参数一般联合使用,在单核情况或者通过cpuset-cpus强制容器使用一个cpu内核的情况下,即使cpu-quota超过cpu-period,也不会使用容器用更多的cpu资源。

cpuset-cpus、cpuset-mems只在多核、多内存节点上的服务器上有效,并且必须与实际的物理配置匹配,否则也无法达到资源控制的目的。

测试 cpuset-cpus 和 cpu-shares 混合使用运行效果,就需要一个压缩力测试工具 stress 来让容器实例把cpu跑满。

stress命令

概述:linux系统压力测试软件 Stress。stress 可以测试Linux系统 cpu/memory/IO/disk的负载。

注:也可以使用epel源中的stress-xxx.rpm

下载页:

bd2bfa6b19a97b611668db6a0b49d18c.png

源码编译安装 stress

[root@apenglinux-002 ~]# curl -O http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz

[root@apenglinux-002 ~]# tar zxvf stress-1.0.4.tar.gz

[root@apenglinux-002 stress-1.0.4]# ./configure --prefix=/usr/local/stree && make -j 4 && make -j 4 install

stress参数解释

-? 显示帮助信息

-v 显示版本号

-q 不显示运行信息

-n 显示已完成的指令情况

-t --timeout N 指定运行N秒后停止

-t --backoff N 等待N微秒后开始运行

-c 产生n个进程 每个进程都反复不停的计算随机数的平方根

-i 产生n个进程 每个进程反复调用 sync(),sync()用于将内存上的内容写到硬盘上

-m --vm n 产生n个进程,每个进程不断调用内存分配 malloc 和内存释放 free函数

-m --vm-bytes B 指定malloc时内存的字节数(默认256MB)

-m --vm-hang N 指定在free栈的秒数

-d --hadd n 产生n个执行 write 和 unlink 函数的进程

-d --hadd-bytes B 指定写的字节数

-d --hadd-noclean 不unlink

产生1个cpu进程,1个io进程,20秒后停止运行

[root@apenglinux-002 stress-1.0.4]# cd /usr/local/stree/

[root@apenglinux-002 stree]# ./bin/stress -c 1 -i 1 --verbose --timeout 20s

查看

2115521ef26a63f6269da70ec972f51e.png

测试 cpuset-cpus 和 cpu-shares 混合使用运行效果

需要一个压缩力测试工具 stress 来让容器实例把cpu跑满。当跑满后,会不会去其他cpu上运行。如果没有在其他cpu上运行,说明 cgroup 资源限制成功。

46314520ecc732cd1a4c2bfaf81665e3.png

创建两个容器实例

[root@apenglinux-002 stree]# docker run -itd --name cpu2 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash

52f6079b005cffb29623bc279ea1f831efae1d620fdfb499757b2fbdb1103780

[root@apenglinux-002 stree]# docker run -itd --name cpu3 --cpuset-cpus 0,1 --cpu-shares 1024 centos /bin/bash

11a738511c2b9df5b3fbb803d03935d681db390dddda13119da0f34cf942b0b3

进入 cpu2,使用stress测试进程是不是只在cpu 0,1上运行

[root@apenglinux-002 stree]# docker exec -it cpu2 /bin/bash

[root@52f6079b005c /]# yum install openssh-clients -y

[root@52f6079b005c /]# scp -r root@192.168.221.20:/usr/local/stree ./

[root@52f6079b005c /]# /stree/bin/stress -c 2 --verbose --timeout 10m

在物理机上使用 top 按 1 查看,每个cpu使用情况

a109739f8f459c3546e020ebf697193a.png

进入 cpu3,使用stress测试进程是不是只在cpu 0,1上运行

[root@apenglinux-002 ~]# docker exec -it cpu3 /bin/bash

[root@11a738511c2b /]# yum install openssh-clients -y

[root@11a738511c2b /]# scp -r root@192.168.221.20:/usr/local/stree ./

[root@11a738511c2b /]# /stree/bin/stress -c 2 --verbose --timeout 10m

容器cpu2,cpu3同时开启两个进程,看看cpu使用情况

dda6b45cb698c5b695a4b56c5765413d.png

注:两个容器只在cpu0,1上运行,cpu3是cpu2使用cpu的2倍。说明 --cpu-shares限制资源成功。

动态修改,将cpu3的--cpu-shares改为512

70fe89b778f99dd3f02148125cd44d86.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值