Technical Guide

Oversized EC2 Instances

How to identify oversized EC2 instances? EC2 instances using under 20% CPU consistently can be downsized to save 30-70% on compute costs without performance impact.

2 min read
High impact optimization

Why This Matters

Oversized instances are one of the most common AWS cost waste patterns. Many organizations over-provision during initial deployments or migrations to avoid performance issues, but never revisit sizing decisions. This creates ongoing waste that compounds monthly.

Common causes:

  • Over-provisioned instances for peak loads that rarely occur
  • Legacy applications that don't utilize modern instance types efficiently
  • Conservative sizing during migrations without proper monitoring

How to Identify Oversized Instances

AWS Saver flags instances as oversized when they meet these criteria:

  1. CPU utilization under 20% averaged over 24 hours
  2. Instance types t3.large or larger (t3.large, t3.xlarge, m5.large, m5.xlarge, c5.large, c5.xlarge, etc.)
  3. Running for more than 7 days (avoids flagging new deployments)
  4. Monthly cost above $5 (focuses on meaningful savings)

How to Fix Oversized Instances

Step 1: Find larger instances that may be oversized

aws ec2 describe-instances \
  --filters Name=instance-state-name,Values=running \
  --query 'Reservations[].Instances[?InstanceType==`t3.large` || InstanceType==`t3.xlarge` || InstanceType==`m5.large` || InstanceType==`m5.xlarge` || InstanceType==`c5.large` || InstanceType==`c5.xlarge`].[InstanceId,InstanceType,LaunchTime,Tags[?Key==`Name`].Value|[0]]'

Step 2: Get CPU utilization for last 24 hours

aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --statistics Average \
  --start-time $(date -u -d '1 day ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period 3600

Step 3: Resize instance (requires downtime)

# Create AMI backup first
aws ec2 create-image \
  --instance-id i-1234567890abcdef0 \
  --name "backup-before-resize-$(date +%Y%m%d)"

# Stop instance
aws ec2 stop-instances --instance-ids i-1234567890abcdef0

# Change instance type
aws ec2 modify-instance-attribute \
  --instance-id i-1234567890abcdef0 \
  --instance-type t3.medium

# Start instance
aws ec2 start-instances --instance-ids i-1234567890abcdef0

Prevention Tips

Monitor regularly: Set up CloudWatch alarms for CPU utilization below 20% to catch oversizing early.

Start small: Begin with smaller instance types and scale up based on actual usage rather than estimates.

Use Auto Scaling: Implement Auto Scaling Groups that can adjust capacity based on demand.

Regular reviews: Schedule monthly reviews of instance utilization as part of your cost optimization process.

Automation Available

Skip the manual work. AWS Saver automatically detects oversized instances using the same 20% CPU threshold and 24-hour analysis period.

Automated detection - Scans all running instances for rightsizing opportunities

Cost impact analysis - Shows exact monthly savings potential per instance

Multi-region scanning - Covers all your AWS regions in 60 seconds

Conservative thresholds - Only flags instances aged over 7 days and above $5/month cost

Ready to Optimize Your AWS Costs?

Skip the manual work. Get automated EC2 optimization across your entire AWS infrastructure.

60-second setup • No credit card required • Immediate results

Automation Available

Skip the manual work. AWS Saver automatically detects and prioritizes this issue across your entire AWS infrastructure.

60-second setup • No credit card required

Manual vs Automated

Manual Process

  • • Run commands across all regions
  • • Set up monitoring and alerts
  • • Repeat regularly for new issues
  • • Scale across multiple accounts

AWS Saver Automation

  • • Continuous multi-region scanning
  • • Automatic cost impact analysis
  • • Real-time alerts and notifications
  • • Cross-account visibility