criticalAdvancedSymptom-first#compute engine#capacity#zone#quota#error

GCE_INTERNAL_ERROR / zone capacity SERVICE_UNAVAILABLE on start

gcloud compute instances start returns error GCE_INTERNAL_ERROR

Likely source:availabilityscaling

Focused incident mode — strips away everything but this runbook.

Symptoms

  • gcloud compute instances start returns error GCE_INTERNAL_ERROR
  • Starting a VM fails with SERVICE_UNAVAILABLE or QUOTA_EXCEEDED
  • MIG cannot add replicas because new instances fail to create
  • Multiple resource types in the zone fail at once

For critical workloads, a multi-zone MIG is the only real defense against capacity exhaustion — a healthy zone cannot save you if the MIG pins to a single unavailable zone.

Evidence to grab

Collect these artifacts before you change anything — they prove (or rule out) each cause.

  • Exact error from the start/create operation

    gcloud compute operations list --filter='targetLink~<INSTANCE>' --format='value(error.errors)'
  • Regional quota headroom

    gcloud compute regions describe <REGION> --format='value(quotas)'

Diagnostic flow

Run the steps in order, marking each claim confirmed or refuted. The evidence you gather feeds the ranked causes below.

Guided decision tree is ready.

Steps with commands, expected output, and pass/fail branches.

Ranked root causes

Evidence checklist

  • Error ZONE_RESOURCE_POOL_EXHAUSTED or GCE_INTERNAL_ERROR
  • Other machine types start fine in the same zone
  • Only new/extra capacity fails while running VMs are unaffected

Confirm before fixing

gcloud compute operations list --filter='error.code=ZONE_RESOURCE_POOL_EXHAUSTED OR error.code=GCE_INTERNAL_ERROR' --limit=10 --format='value(targetLink)'
READ

Confirm the class of capacity error

Expected: A list of operations that hit capacity errors

Fix

gcloud compute instances move <INSTANCE> --zone=<ZONE> --destination-zone=<ALT_ZONE>
CHANGE

Move or recreate the instance in a healthier zone

Expected: Instance [<INSTANCE>] moved/recreated in the alternate zone

Resolution runbook

Apply from top to bottom after the cause is confirmed. Review every command before running it — risk tags are shown on each.

1
gcloud compute operations list --filter='targetLink~<INSTANCE>' --format='value(error)'
READ

Read the exact error before acting

2
gcloud compute regions describe <REGION> --format='json(quotas)'
READ

Check project quota is not the blocker

3
gcloud compute instances move <INSTANCE> --zone=<ZONE> --destination-zone=<ALT_ZONE>
CHANGE

Move to a zone with available capacity

4
gcloud compute instances start <INSTANCE> --zone=<ALT_ZONE>
CHANGE

Start the instance in the alternate zone

Prevention

  • Run stateless workloads in regional MIGs across at least two zones.
  • Set MIG autohealing so capacity failures trigger replacement automatically.
  • Request regional CPU quota with headroom before launch events.
  • Watch ZONE_RESOURCE_POOL_EXHAUSTED and GCE_INTERNAL_ERROR in Cloud Monitoring metrics.

Commands marked READ CHANGE DESTRUCTIVE — never run DESTRUCTIVE commands against production data you cannot restore. Copy → verify → execute.