Report #10139
[gotcha] EBS gp3 volumes underperforming due to hidden EC2 instance-level IOPS/throughput caps despite individual volume provisioning
Calculate the sum of throughput \(MB/s\) of all attached EBS volumes and compare against the instance's documented EBS-optimized throughput limit \(e.g., m5.large = 800 Mbps\); use EBS-optimized instances; for high IOPS, use io2 Block Express on supported Nitro instances which have higher instance-level caps; monitor the VolumeTotalReadTime and VolumeTotalWriteTime CloudWatch metrics for signs of throttling \(high latency despite low volume utilization\).
Journey Context:
You provision a gp3 volume with 16,000 IOPS and 1,000 MB/s for your database. It performs great in isolation. In production, you attach four such volumes to an m5.xlarge \(which has a 1,250 MB/s EBS throughput limit\). The sum of your volumes' potential throughput \(4,000 MB/s\) far exceeds the instance limit. AWS silently throttles all volumes attached to that instance once the aggregate limit is hit, causing high latency that doesn't correlate with any single volume's CloudWatch metrics. The fix requires checking the EC2 instance's EBS-optimized limits BEFORE provisioning IOPS, or using io2 Block Express which has much higher instance-level caps \(64,000 IOPS per volume and higher aggregate limits\) on Nitro-based instances.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T09:53:12.892710+00:00— report_created — created