Convert CloudWatch CPU averages into busy vCPUs, idle headroom and the monthly cost of the capacity you never use.
CloudWatch reports CPU as a percentage of the whole instance, so multiplying by the vCPU count converts it into absolute compute. Costing the idle share is a first-order approximation because EC2 charges for the instance, not the cycles — the idle fraction is money spent on capacity that produced nothing. Sizing on the p99 rather than the mean is what keeps a resize from causing a latency regression. Average CPU under 20% with a modest peak is the classic right-sizing signal, and putting a dollar figure on the idle share is what gets a resize prioritised over a backlog item.
EC2 CPU Utilization
busy vCPU = vCPUs × average CPU%; idle cost = hourly rate × hours × (idle vCPU ÷ total vCPU); vCPU at target = ceil(busy vCPU ÷ target%).
busy vCPU = vCPUs × average CPU%; idle cost = hourly rate × hours × (idle vCPU ÷ total vCPU); vCPU at target = ceil(busy vCPU ÷ target%). CloudWatch reports CPU as a percentage of the whole instance, so multiplying by the vCPU count converts it into absolute compute. Costing the idle share is a first-order approximation because EC2 charges for the instance, not the cycles — the idle fraction is money spent on capacity that produced nothing. Sizing on the p99 rather than the mean is what keeps a resize from causing a latency regression.
Average CPU under 20% with a modest peak is the classic right-sizing signal, and putting a dollar figure on the idle share is what gets a resize prioritised over a backlog item.
This calculator takes 6 inputs: vCPUs on the instance, Average CPU utilisation, Peak CPU utilisation, Target utilisation for sizing, On-demand rate per hour, Hours running per month. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.