默认情况下容器可以使用的主机 CPU 资源是不受限制的。和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难。本文将介绍如何限制容器可以使用的 CPU 资源

1. 安装 sysstat,htop 工具

yum -y install sysstat epel-release htop

2. 测试(每 3 秒对所有的 cpu 采样 10 次)

mpstat -P ALL 3 10

image.png

指标说明:

  • user:在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程,值为 (usr/total)*100
  • nice:在internal时间段里,nice值为负进程的CPU时间(%),值为(nice/total)*100
  • system:在internal时间段里,核心时间(%),值为(system/total)*100
  • iowait:在internal时间段里,硬盘IO等待时间(%),值为(iowait/total)*100
  • irq:在internal时间段里,硬中断时间(%),值为(irq/total)*100
  • soft:在internal时间段里,软中断时间(%),值为(softirq/total)*100
  • idle:在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%),值为(idle/total)*100
  • intr/s:在internal时间段里,每秒CPU接收的中断的次数,值为(intr/total)*100

htop查看系统指标

image.png

3.拉取agileek/cpuset-test镜像

agileek/cpuset-test给出了一种用于测试CPU的image,功能就是将指定的CPU资源用满

docker pull agileek/cpuset-test

image.png

4.模拟测试 Docker 限制 容器CPU使用率

一般使用这两个参数:–cpu-period + –cpu-quota

这两个设置项是成对出现的,在理解这2个概念之前需要清楚,linux系统中进程的CPU占比是如何计算的,简单可以理解为:在单位的时间内(也称刷新时间),进程占用CPU的时间比,这里只是单个CPU的比值(进程CPU使用比例),如果是多核CPU,即 进程CPU使用占比/CPU核数=系统CPU占比

  • cpu-period:指刷新时间,单位是微秒(us),默认值是0.1秒,即100,000us
  • cpu-quota:容器占用时间,单位是微秒(us),默认是-1,即不限制

通过测试说明:

实验使用2核CPU

容器cpu占用50%,因为用的2核CPU,top中进程CPU比例50%,系统CPU使用比例25%

docker run -it --rm --cpu-quota=50000 --name=test agileek/cpuset-test

image.png

image.png

image.png

容器cpu占用100%,系统CPU使用比例50%

docker run -it --rm --cpu-quota=100000 --name=test agileek/cpuset-test

image.png

image.png

容器CPU占用比重为500 000/1 000 000=50%;1秒内最多使用0.5秒的CPU;最多不超过一个内核的50%,系统使用比例则是 25%

docker run -it --rm --cpu-period=1000000 --cpu-quota=500000 --name=test agileek/cpuset-test
点赞(0)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部