Skip to content

AWS Troubleshooting

Exercises

  1. Interpret capacity error node states

A cluster shows the following sinfo output. What happened, and what should you do?

PARTITION AVAIL TIMELIMIT NODES STATE  NODELIST
gpu*      up    infinite  1     down#  gpu-dy-p5-1
gpu*      up    infinite  7     down~  gpu-dy-p5-[2-8]
gpu*      up    infinite  8     idle~  gpu-dy-g6-[1-8]
Hint / Solution Node `gpu-dy-p5-1` failed to launch (likely `InsufficientInstanceCapacity` for p5.48xlarge). The `down#` state means it was the node that tried to launch. The `down~` nodes are other p5 nodes in the same compute resource, pre-emptively disabled by fast insufficient capacity fail-over. The `gpu-dy-g6` nodes are a different compute resource (g6 instances) and are still `idle~` (available). The job should automatically requeue to the g6 compute resource. **To verify:** `scontrol show nodes gpu-dy-p5-1 | grep Reason` **If the job didn't requeue:** Check that both compute resources are in the same queue and that the job's constraints allow g6 instances. Expected output: Validated 2026-10-19 on slurm-training-val (Slurm 25.11.8, ParallelCluster 3.16.1).
$ sinfo -R
REASON               USER      TIMESTAMP           NODELIST

$ scontrol show node batch-dy-compute-1 | grep -E '(Reason|State)='
   State=IDLE+CLOUD ThreadsPerCore=1 TmpDisk=0 Weight=1000 Owner=N/A MCS_label=N/A
  1. Diagnose a bootstrap failure

Your cluster has entered protected mode. No jobs are running. How do you find out what went wrong and recover?

Hint / Solution
# 1. Confirm protected mode
pcluster describe-compute-fleet --cluster-name mycluster --region us-east-2
# Look for "status": "PROTECTED"

# 2. Find which queue is affected
sinfo
# Partitions showing INACTIVE = protected mode triggered

# 3. Find the failing nodes
sudo grep "Node bootstrap error" /var/log/parallelcluster/clustermgtd

# 4. Check the compute node logs (get IP from step 3)
# SSH or SSM to the compute node, then:
sudo tail -100 /var/log/cloud-init-output.log

# 5. Fix the root cause (custom action, security group, etc.)

# 6. Exit protected mode
pcluster update-compute-fleet --cluster-name mycluster \
  --region us-east-2 --status START_REQUESTED
Expected output: Validated 2026-10-19 on slurm-training-val (Slurm 25.11.8, ParallelCluster 3.16.1).
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
batch*       up   infinite      3  idle~ batch-dy-compute-[2-4]
batch*       up   infinite      1   idle batch-dy-compute-1
debug        up   infinite      2  idle~ debug-dy-small-[1-2]
gpu          up   infinite      1  idle~ gpu-dy-t4-1
highmem      up   infinite      1  idle~ highmem-dy-large-1

$ sudo grep 'Node bootstrap error' /var/log/parallelcluster/clustermgtd 2>/dev/null | tail -5 || echo '(no bootstrap errors found)'

$ sudo tail -3 /var/log/parallelcluster/clustermgtd
2026-10-19 01:14:41,42 - [slurm_plugin.clustermgtd:_maintain_nodes] - INFO - Performing node maintenance actions
2026-10-19 01:14:41,43 - [slurm_plugin.clustermgtd:_maintain_nodes] - INFO - Following nodes are currently in replacement: (x0) []
2026-10-19 01:14:41,43 - [slurm_plugin.clustermgtd:_terminate_orphaned_instances] - INFO - Checking for orphaned instance
  1. Time a cold start

A dynamic node is powered down (idle~). Measure how long a job takes to start on it, and find where the time went using the head node's resume log.

Hint / Solution
# 1. Pick a powered-down node (head node)
sinfo -h -N -p <queue> -o '%N %T' | grep 'idle~' | head -1

# 2. Submit a trivial job pinned to it. --chdir=/tmp: an SSM session's
#    working directory does not exist on the node (instant FAILED, 0:53)
id=$(sbatch --parsable -p <queue> -w <node> --chdir=/tmp --wrap=hostname)

# 3. Cold-start time = Start minus Submit
sacct -j "$id" -X -o JobID,Submit,Start,Elapsed,NodeList   # needs accounting
scontrol show job "$id" | grep -E 'SubmitTime|StartTime'   # fallback, while the job is in memory

# 4. When did ParallelCluster start launching the node? (head node)
sudo grep "<node>" /var/log/parallelcluster/slurm_resume.log | head -3
The first `slurm_resume.log` line for the node is the end of phase 1. `Start` minus that timestamp is phases 2 to 5 (instance boot, cloud-init, cookbook and your custom actions, `slurmd` registration). Run it three times; to split phase 4 out, read the node's `chef-client` stream in CloudWatch ([Accessing Compute Node Logs](#accessing-compute-node-logs)).

References