Fractal Techware

Alert runbooks /

NodeLoadHigh

The host’s long-term load average has been far above the number of CPUs it has, so work is queuing up.

   
Severity warning
Source node_exporter 1.x, loadavg and cpu collectors
Key metrics node_load15, node_cpu_seconds_total (used to count CPUs)

What it means

On Linux, load average counts tasks that are running, waiting for a CPU, or in uninterruptible sleep (usually waiting for disk or NFS). The alert compares the 15-minute load to the host’s CPU count and fires when load has been a clear multiple of it for a long period, so a short spike will not page you.

High load is a symptom, not a diagnosis. It can mean “not enough CPU” or “everything is stuck waiting on storage”, and the fixes are different.

Common causes

First checks

  1. Compare short and long load to see if it is getting better or worse:
    node_load1{instance="<instance>"}
    node_load15{instance="<instance>"}
    count by (instance) (node_cpu_seconds_total{mode="idle", instance="<instance>"})
    
  2. Break CPU time down by mode. High user/system means CPU contention; high iowait means blocked I/O; high steal means the hypervisor:
    sum by (mode) (rate(node_cpu_seconds_total{instance="<instance>", mode!="idle"}[5m]))
    
  3. On the host, find the top consumers:
    top -b -n1 -o %CPU | head -20
    
  4. Count processes in uninterruptible sleep and what they wait on:
    ps -eo state,pid,wchan:32,cmd | awk '$1=="D"'
    
  5. Check run queue and swap activity:
    vmstat 2 5   # r = runnable, b = blocked, si/so = swap
    

Fixing it

For CPU contention, stop or throttle the runaway process, scale out, or move to a larger instance; on Kubernetes, set CPU requests and limits and rebalance pods. For D-state tasks, fix the underlying storage or remount the hung filesystem. For steal, move the VM or change instance type. For swapping, address memory first.