AWS Builder Center

My EC2 CPU Credits Cost More Than Compute: Reading the Bill Behind a $0 Balance

My t3.micro generated $3.71 in CPU-credit charges against $1.51 in base compute. A real billing investigation explains Unlimited mode, promotional credits, and verified EC2 cleanup.

On October 7, 2026, my AWS bill showed $1.51 for running a Linux t3.micro instance and $3.71 for T3 CPU credits. The extra CPU usage cost about 2.46 times the base compute charge.
The estimated grand total was still $0.00. AWS Community Builders promotional credits were covering the usage.
This is a small account, but the lesson applies to much larger workloads: the instance's hourly rate is only one part of its cost. Here is how I followed the bill to a server in Stockholm, separated usage from credits, and verified its cleanup.

The CPU credit line was the largest charge

The expanded EC2 bill showed 140.018 instance-hours at $0.0108 per hour, displayed as $1.51. A separate T3CPUCredits entry showed 74.274 vCPU-hours at $0.05 per vCPU-hour, displayed as $3.71.
The CPU-credit calculation was:
74.274 × $0.05 = $3.7137 ≈ $3.71
Those are rates and quantities from my October bill in EU Stockholm, not universal prices for every region or operating system.
EC2 usage totaled $5.35, including CPU credits and storage. A matching promotional credit offset it.

Unlimited mode explains the mechanism

The instance was configured for Unlimited CPU credits. Burstable instances earn CPU credits and spend them to run above their baseline. Unlimited mode lets an instance spend surplus credits after its earned balance is depleted. Earned credits can pay that surplus down; surplus usage that remains unpaid under AWS's billing rules can produce an additional charge.
AWS documents the conditions in Unlimited mode concepts for burstable instances .
The bill established that surplus CPU usage was charged. It did not establish which process caused it. My instance was named Tailscale, but I did not inspect its processes or historical CPU metrics, so I cannot blame Tailscale for that usage.
For a server I wanted to keep, I would investigate the workload alongside CloudWatch's CPUUtilization, CPUCreditBalance, CPUSurplusCreditBalance, and CPUSurplusCreditsCharged metrics. I would then compare the workload's needs with the instance's baseline and pricing. Switching to Standard mode also changes the available burst behavior; it is a performance decision as well as a cost decision.

A zero estimated bill can cover real usage

Here are the displayed amounts at two points in the investigation:
Usage categoryOctober 6October 7
Linux t3.micro instance time$1.34$1.51
T3 surplus CPU credits$3.10$3.71
EBS gp3 storage$0.11$0.13
In-use public IPv4$0.63$0.71
Total displayed usage$5.18$6.06
On October 7, $5.35 in EC2 usage and $0.71 in VPC public IPv4 usage were offset by Community Builders credits. The pending bill therefore showed $0.00.
The estimated amount payable was zero; the resource usage was not.
These are dated snapshots of a pending bill, not a final invoice. Credits, usage charges, and the amount payable answer different questions. A forecast answers another: what future usage might cost. It is not a spending limit.

Follow the charging region and the attached resources

My console initially showed N. Virginia. The billing breakdown pointed to EU Stockholm (eu-north-1). I switched to that region and found one running t3.micro instance, an 8 GiB root EBS volume, and an auto-assigned public IPv4 address. No Auto Scaling group was listed.
The IPv4 charge appeared under VPC, not EC2. It showed 142 hours at $0.005 per hour, or $0.71.
One server's costs were spread across multiple billing entries.
This is why I started with service, region, and usage type instead of treating each service label as a separate application.

Cleanup needed verification

I chose to retire the server. Before termination, I checked the root volume's Delete on termination setting: it was Yes. Terminating it would permanently delete that disk and end the service running on the instance. AWS's termination guidance  explains the data-loss implications.
I used the normal shutdown path and left Skip OS shutdown unchecked. Then I verified the instance reached Terminated.
I refreshed the volume listing and confirmed there were no EBS volumes remaining in Stockholm. The Elastic IP page also showed no allocations in that region.
Stopping the instance alone would have retained its disk. For this retirement, disk deletion was part of completing the cleanup.

What this changes about my next EC2 review

I will review burstable instances using the full bill: compute, surplus CPU credits, storage, and public IPs. When an extra charge is unexpected, I will investigate the workload before choosing a different credit mode or instance type.
One final billing detail matters: stopping or terminating an Unlimited instance can trigger charges for an outstanding surplus credit balance. Deletion does not erase usage already incurred, and billing can continue updating after shutdown.
The verified result here was removal of this instance and its root volume, with no Elastic IP allocations left in Stockholm. It was not a full audit of every service and region in the account.
The number I will remember is $3.71. A small instance's base hourly price looked modest, but surplus CPU credits were the largest item. Promotional credits covered the bill; reading the usage breakdown exposed what the server actually cost.
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article