Load average is the number of processes either running or waiting to run, averaged over one, five and fifteen minutes. On its own the figure means nothing: it is only readable against the number of cores you have.
uptime\n# load average: 3.20, 2.85, 1.90\nnproc\n# 4
What the numbers say
- Load below your core count - there is capacity to spare.
- Load equal to your core count - fully used, nothing waiting. This is efficient, not broken.
- Load well above it - work is queueing, and every request is slower than it needs to be.
The three figures together tell you the direction. 8.0, 4.0, 2.0 is a spike that just started. 2.0, 4.0, 8.0 is something that is already recovering.
High load is not one problem
A process waiting for a slow disk counts toward load exactly as a process burning CPU does. Look at what the load is made of before you buy more of anything.
top -b -n 1 | head -20\niostat -x 2 3
- High %us - your own code. Profile the slow page.
- High %wa - waiting for disk. Look at queries and at logs being written per request.
- High %sy - the kernel is busy, often too many processes being created.
A load spike that lines up with a cron job is a scheduling problem, not a capacity one. Move the job, or spread it.