概述
本文档详细解释了在容器监控(尤其是使用cAdvisor/Prometheus体系)中常见的CPU相关指标。这些指标对于理解容器的CPU使用情况、性能瓶颈及资源限制至关重要。
所有指标通常以累计计数器的形式暴露,意味着其值从容器启动开始单调递增。分析时通常需要计算速率(如 per-second rate)或比率。
使用量指标(Usage Metrics)
这些指标直接反映了容器对CPU时间的消耗。
CPU使用总时间
| 指标名称 | container_cpu_usage_seconds_total |
|---|---|
| 类型 | Counter(累计计数器) |
| 单位 | 秒 |
| 核心说明 | 容器消耗的总CPU时间。这是最核心的CPU使用量指标。 |
| 详细解释 | 该指标统计了容器所有进程在内核态和用户态运行所花费的总CPU时间。如果容器有多个CPU核心配额,其值可能大于实际流逝的挂钟时间。 |
| 计算示例 | rate(container_cpu_usage_seconds_total[5m]) 返回过去5分钟内,平均每秒消耗的CPU秒数。这个值可以直接理解为平均CPU核心使用量。例如,结果为1.2表示平均使用了1.2个CPU核心。 |
CPU用户态时间
| 指标名称 | container_cpu_user_seconds_total |
|---|---|
| 类型 | Counter |
| 单位 | 秒 |
| 核心说明 | 容器在用户态消耗的CPU时间。 |
| 详细解释 | 指运行用户空间应用程序代码所花费的时间。通常,较高的用户态时间代表应用本身在进行计算处理。 |
CPU内核态时间
| 指标名称 | container_cpu_system_seconds_total |
|---|---|
| 类型 | Counter |
| 单位 | 秒 |
| 核心说明 | 容器在内核态消耗的CPU时间。 |
| 详细解释 | 指代表容器执行系统调用(如文件I/O、网络I/O)时,内核运行所花费的时间。 |
| 关键关系 | container_cpu_usage_seconds_total ≈ container_cpu_user_seconds_total + container_cpu_system_seconds_total |
CPU限流(Throttling)指标
当容器设置了CPU限制(如Kubernetes中的limits.cpu)时,Linux内核的CFS调度器会负责执行此限制。这些指标用于判断容器是否因达到限制而被“限流”,这是性能抖动和延迟增加的常见原因。
容器CPU CFS周期总数
| 指标名称 | container_cpu_cfs_periods_total |
|---|---|
| 类型 | Counter |
| 单位 | 个(周期数) |
| 核心说明 | 容器经历过的CFS调度周期总数。 |
| 详细解释 | CFS调度器以固定的周期(cfs_period_us,默认100ms)进行时间记账。此计数器记录容器自启动后经历了多少个这样的周期。 |
容器CPU CFS受限周期总数
| 指标名称 | container_cpu_cfs_throttled_periods_total |
|---|---|
| 类型 | Counter |
| 单位 | 个(周期数) |
| 核心说明 | 容器被限流的周期总数。 |
| 详细解释 | 在某个调度周期内,如果容器在周期结束前就已用尽其配额(cfs_quota_us),则该周期内剩余的时间容器将被“限流”(暂停执行),直到下一个周期开始。此计数器记录发生这种情况的周期数。 |
容器CPU CFS受限总时间
| 指标名称 | container_cpu_cfs_throttled_seconds_total |
|---|---|
| 类型 | Counter |
| 单位 | 秒 |
| 核心说明 | 容器被限流的总时间。 |
| 详细解释 | 将所有限流周期中,容器被禁止执行的时间累加起来。这是衡量性能影响最直接的量化指标。 |
CPU限流频率占比
| 核心说明 | 限流频率百分比衡量容器在 调度周期层面 受到CPU限制的频率,即有多少比例的CPU调度周期触发了限流机制。 |
|---|---|
| 单位 | % |
| 计算原理 | 限流频率百分比 = (被限制的周期数 ÷ 总调度周期数) × 100% |
| 调用周期基础 | Linux内核的CFS(完全公平调度器)以固定时间片(通常100ms)调度CPU资源每个周期称为一个调度周期 |
| 触发条件 | 当容器在单个调度周期内使用的CPU时间超过其配额(由K8s limits设定) 该周期即被标记为限流周期该周期即被标记为限流周期 |
| 计算示例 | 总调度周期数:6000个周期限流周期数: 300个周期限流频率百分比 = (300 ÷ 6000) × 100% = 5% |
CPU限流时间占比
| 核心说明 | 限流时间占比衡量容器实际被暂停执行的时间比例,即因CPU限制而无法运行的时间占总时间的百分比。 |
|---|---|
| 单位 | % |
| 计算原理 | 限流时间占比 = (被限制的时间 ÷ 总运行时间) × 100% |
| 时间维度测量 |
|
| 与频率百分比的区别 |
|
作者:叶奕珺 创建时间:2025-12-21 14:00
最后编辑:叶奕珺 更新时间:2026-01-15 14:15
最后编辑:叶奕珺 更新时间:2026-01-15 14:15