如何获取Docker容器相对于CPU配额的使用率?
获取容器相对于CPU配额的使用率
原生Docker命令方案
首先,docker stats默认显示的CPU%是容器占用宿主机总CPU的百分比,它不会直接输出容器相对于自身CPU配额的使用率。不过你可以手动计算这个值:
假设宿主机总共有N个CPU核心,你给容器设置的CPU配额是--cpus=C(比如C=0.5),那么这个配额对应的宿主机CPU占比上限是 C/N * 100%。
拿实际场景举例:
- 宿主机是1核CPU
- 容器设置
--cpus=0.5,即最多使用宿主机50%的CPU docker stats显示容器的CPU%为49.5%- 计算相对使用率:
49.5 / (0.5*100) = 99%—— 这就是容器在自身配额内的使用率
如果想自动化这个计算,你可以写个简单的Shell脚本,解析docker stats的输出(或者用docker inspect获取容器的CPU配额配置)来自动完成计算。
使用cadvisor + Prometheus的方案
这是更适合长期监控的优雅方案,能轻松实现可视化和告警:
cadvisor会自动收集容器的CPU相关核心指标,其中关键的几个是:
container_cpu_usage_seconds_total:容器累计使用的CPU时间(通过rate()函数可以计算出每秒的CPU使用量)container_spec_cpu_quota和container_spec_cpu_period:Docker实现CPU硬限制的底层参数(当你设置--cpus=C时,Docker会自动将quota设为C * period,默认period是100000微秒)
通过PromQL查询,你可以直接得到容器相对于自身配额的使用率:
100 * rate(container_cpu_usage_seconds_total[1m]) / (container_spec_cpu_quota / container_spec_cpu_period)
这个查询的逻辑是:用容器每秒实际使用的CPU时间,除以它每秒被允许使用的最大CPU时间,再乘以100得到百分比。
额外补充:如果想判断容器是否因为CPU配额被限流,可以查看container_cpu_cfs_throttled_seconds_total指标,这个指标累计了容器被CPU限流的时间,数值越高说明容器越频繁地触及CPU配额上限。
内容的提问来源于stack exchange,提问作者Nitul
相关产品推荐
相关产品推荐

