Understanding Load Average
Load average shows processes waiting for CPU or I/O:
uptime
# 10:30:01 up 5 days, load average: 2.50, 1.80, 1.20
- 1-minute, 5-minute, 15-minute averages
- Load > number of CPU cores = overloaded
- Check cores:
nprocorlscpu
Diagnose High Load
High load + low CPU usage = I/O wait:
top -c # Look for %wa (I/O wait)
mpstat -P ALL 1
# Check disk I/O
iostat -x 1
sudo iotop -o
High load + high CPU = CPU-bound processes:
top # Look for processes using >100% CPU
High Load Due to I/O Wait
Disk is bottleneck:
sudo iotop -o
sudo pidstat -d 1
sudo smartctl -a /dev/vda
Solutions for I/O wait:
- Move databases to faster storage (SSD NVMe)
- Reduce MySQL queries, add indexes
- Move logs to separate disk
- Use noatime mount option
High Load Due to CPU
htop -s PERCENT_CPU
ps aux --sort=-%cpu | head -10
- Optimize application code
- Add caching (Redis, Varnish)
- Upgrade VPS CPU
- Load balance across servers
High Load Due to Memory Pressure
vmstat 1
free -h
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Process States
ps aux | awk '{print $8}' | sort | uniq -c
- R Running (CPU)
- D Uninterruptible sleep (I/O issue)
- S Sleeping (normal)
- Z Zombie process
⚠️ High I/O wait often indicates storage or database optimization is required.