PricingPricingDocsDocsBlogBlogBook a demoBook a demoCompanyCompany (opens in a new tab)
Product
DocsAPI ReferencePricingConsole DemoBlogCompany
Start Freev3.4.7
Wave Diagnosis

CPU Utilization Analysis

Places every workload in one of four levels by its CPU usage as a share of its CPU request, and ranks the workloads with the worst on top.

The challenge

kubectl top shows 974m. It does not show that this is 195% of the CPU request

kubernetes.io, Assign CPU Resources to Containers and Pods, and Resource Management for Pods and Containers; cAdvisor Prometheus metrics docs; Datadog Container Report, 2023. The 974m and 500m come from the kubernetes.io example and are illustrative here.

kubectl top reports CPU in millicores. In the kubernetes.io example, a Pod with a CPU request of 500m uses 974m, which is 195% of its request. kubectl top prints 974m and leaves the division to you.

"CPU limits are enforced by CPU throttling" (kubernetes.io). The throttling counter, container_cpu_cfs_throttled_seconds_total, is in cAdvisor, not in kubectl top.

Over 65% of Kubernetes workloads use less than half of their requested CPU and memory (Datadog Container Report, 2023).

Raw millicores, then each workload as a share of its requestWithout WaveWith Wave974m2100m120mraw millicoreseach vs its request
Without Wave
kubectl top prints millicores, with no request next to themNAMECPU(cores)api-7f9c974mweb-5d2b700mbatch-9k1m2100mworker-3x8q120mWhich one is close to its request?
kubectl top prints 974m, 700m, 2100m, and 120m. Without each request, you cannot tell that 974m is the one running at almost twice its request.
With Wave
Wave shows each workload as a share of its request, in four levelsapi-7f9c195% · Severeweb-5d2b70% · Highbatch-9k1m53% · Mediumworker-3x8q12% · NormalCPU requestNormalMediumHighSevere
Wave divides usage by the request: 974m of 500m is 195%, Severe. The levels are Normal below 40%, Medium 40% to 60%, High 60% to 80%, and Severe 80% or more. The worst workload is on top.

Levels by usage as a share of the request: Wave CPU Utilization docs. 974m of a 500m request: kubernetes.io example. The other workloads and values are illustrative.

How Wave does it

From CPU usage to a ranked list
Kubernetes by defaultRaw numbers, no ranking
  1. cAdvisor
    reads container CPU, inside the kubelet
  2. ↓usage→
    metrics-server
    keeps the latest value per Pod
  3. ↓latest→
    kubectl top
    prints millicores, with no request shown
  4. ↓by hand→
    Engineer
    compares each value with its request
Wave DiagnosisEvery workload in one of 4 levels
  1. Wave Agent
    CPU per container, with cAdvisor
  2. ↓gRPC→
    Wave Core
    usage as a share of the CPU request
  3. ↓share→
    Four levels
    Normal, Medium, High, Severe
  4. ↓ranked→
    Wave Console
    workloads ranked, worst on top
Default lane: kubernetes.io (Resource Management for Pods and Containers, Assign CPU Resources, Resource metrics pipeline) and cAdvisor docs. Wave lane: Wave CPU Utilization docs and Wave Architecture docs.
1

Compare with the request

Wave reads each workload's CPU usage as a share of its CPU request, not as raw millicores.

2

Sort into four levels

Normal below 40%, Medium 40% to 60%, High 60% to 80%, and Severe 80% or more. For each level, Wave shows how many times a workload entered it and how long it stayed, on average, within an hour.

3

Rank and group

The table puts the worst workloads on top. A Filter Group adds up the workloads that match its labels, such as a team, an environment, or a tier, into one row.

Related in Wave Diagnosis

Pod / Container Failures →Memory Leak Detection →Pod Scheduling Delay Detection →Idle Node Detection →Unused PV Detection →Cluster Resource Forecast →PV Capacity Forecast →Read the docs →
Book a demoStart free
Product
WaveWave GPULLM Serving Professional ServiceWave AI Agent2026 Q4
Resources
DocsAPI ReferenceBlogConsole DemoPricing
Company
STCLabBook a demoContact
STCLab© 2026 Wave All rights reserved.
Terms of ServicePrivacy PolicyCookies