Symptoms
- Launch, start or resize fails with
500 InternalErrorand messageOut of host capacity. - An instance pool or autoscaling scale-out stays below target with the same error in its work requests.
- A stopped instance won't start again (stopping a VM releases its host capacity).
This is not a quota error. Quotas and service limits give LimitExceeded or QuotaExceeded. "Out of host capacity" means OCI has no free hosts of that shape in that availability domain (AD) or fault domain right now.
Step 1: Rule out limits
oci limits resource-availability get --service-name compute \
--limit-name standard-e5-core-count --compartment-id $TENANCY \
--availability-domain "XXXX:AP-MUMBAI-1-AD-1"
Limit names vary by shape; list them with oci limits definition list --service-name compute --compartment-id $TENANCY --all. If available is 0, request a limit increase; that's a different problem.
Step 2: Try a different fault domain or AD
Capacity is tracked per AD and per fault domain. If you pinned a fault domain, let OCI choose:
oci compute instance launch \
--availability-domain "XXXX:AP-MUMBAI-1-AD-1" \
--compartment-id $COMPARTMENT \
--shape VM.Standard.E5.Flex \
--shape-config '{"ocpus":4,"memoryInGBs":64}' \
--subnet-id $SUBNET --image-id $IMAGE \
--display-name app02
# no --fault-domain: OCI picks one with capacity
In multi-AD regions, try another AD (the subnet must be regional or exist in that AD):
oci iam availability-domain list --query 'data[].name' --output table
Many regions have a single AD; then fault domains and shapes are your only levers.
Step 3: Try a nearby shape
Capacity is per shape family. Often one family is exhausted while another is free:
| If this fails | Try |
|---|---|
VM.Standard.E5.Flex | VM.Standard.E4.Flex, VM.Standard3.Flex |
VM.Standard.E4.Flex | VM.Standard.E5.Flex, VM.Standard.A1.Flex (Arm, if your software supports it) |
| A large Flex size | Smaller OCPU/memory per instance, more instances |
| GPU shapes | Another region, or a capacity reservation |
Check which shapes the AD offers to your compartment:
oci compute shape list --compartment-id $COMPARTMENT \
--availability-domain "XXXX:AP-MUMBAI-1-AD-1" \
--query 'data[].shape' --output table
Tip
Smaller Flex instances fit into fragmented capacity more easily. If a 32-OCPU VM fails, two 16-OCPU VMs may launch fine.
Step 4: For a stopped instance that won't start
You can't change AD on start. Options, from least to most effort:
- Retry start every few minutes for a short period (capacity frees up as others stop).
- Change the shape while stopped (
oci compute instance update --instance-id ... --shape VM.Standard.E4.Flex --shape-config ...), then start. - Create a new instance from the boot volume (or a boot volume backup) in another fault domain or AD.
Warning
Don't stop production instances casually in a tight region. A stopped VM gives back its capacity; you may not get it back when you need it. Use reboot instead of stop/start where possible.
Step 5: Reserve capacity for workloads that must start
Compute capacity reservations hold host capacity for you in an AD (and optionally a fault domain). You pay for reserved-but-unused capacity at a discounted rate (check current pricing).
oci compute capacity-reservation create \
--compartment-id $COMPARTMENT \
--availability-domain "XXXX:AP-MUMBAI-1-AD-1" \
--display-name cr-app-prod \
--instance-reservation-configs '[{"instanceShape":"VM.Standard.E5.Flex","instanceShapeConfig":{"ocpus":4,"memoryInGBs":64},"reservedCount":4}]'
Launch into it with --capacity-reservation-id. Use reservations for:
- DR instances you must start during a regional event.
- Batch or month-end workloads that scale out on schedule.
- GPU workloads.
Step 6: Make instance pools resilient
An instance pool pinned to one fault domain and one shape fails as a unit. Configure placement across fault domains (and ADs where available):
"placementConfigurations": [
{ "availabilityDomain": "XXXX:AP-MUMBAI-1-AD-1",
"primarySubnetId": "ocid1.subnet...",
"faultDomains": ["FAULT-DOMAIN-1","FAULT-DOMAIN-2","FAULT-DOMAIN-3"] }
]
Check work requests to see failed scale-outs:
oci work-requests work-request list --compartment-id $COMPARTMENT --resource-id $POOL_ID \
--query 'data[?status==`FAILED`].{op:"operation-type", time:"time-accepted"}' --output table
Keep a second instance configuration with an alternate shape ready, so you can switch the pool quickly (oci compute-management instance-pool update --instance-configuration-id ...).
Symptom → action
| Situation | Action |
|---|---|
| One-off launch fails | Drop fault domain pin, try other AD, try another shape |
| Stopped VM won't start | Change shape, or relaunch from boot volume elsewhere |
| Autoscaling fails at peak | Spread across FDs, alternate instance configuration, reservation |
| DR launch must succeed | Capacity reservation in DR region |
| GPU shapes | Reservation or talk to your Oracle account team early |
Prevent it next time
- Don't pin fault domains unless you need anti-affinity; when you do, use all three.
- Build images for two shape families (AMD and Intel, or x86 and Arm) so you can switch.
- Reserve capacity for DR and scheduled peaks; test that launches into the reservation work.
- Alert on failed instance pool work requests so scale-out failures don't go unnoticed until users complain.