When someone says “the server is slow”, the load average is usually the first number people check, and it is also the most misunderstood. A high load average tells you that something is queued, not what. This article gives you a repeatable method for going from a vague complaint to a specific bottleneck, using tools present on nearly every Linux system.
What Load Average Actually Measures
On Linux, the three load average numbers (over the last one, five and fifteen minutes) count tasks that are running or ready to run, plus tasks in uninterruptible sleep, which is typically waiting for disk or network storage. That last part is why a server can show heavy load while its CPUs sit mostly idle: many processes may be stuck waiting on slow storage.
To interpret the values, compare them with the number of CPU cores. A load roughly equal to the core count means the CPUs are about fully used on average. Meaningfully higher means work is waiting. The direction matters too: if the one-minute figure exceeds the fifteen-minute figure, the problem is recent and growing.
Step One: Establish Scope and Timing
Before running commands, ask basic questions. Is everything slow or one feature? Did it start suddenly or gradually? Did something change, such as a deployment, a configuration edit, a new scheduled job or an increase in traffic? Many “mysterious” slowdowns are explained by the most recent change. Check the logs and your change history around the time it began.
Step Two: Classify the Bottleneck
Run a process viewer such as top or htop and look at the CPU summary line. The breakdown points you toward one of four families.
| What you see | Likely bottleneck | Next tools |
|---|---|---|
| High user CPU | Application computation | Process list, profiler for the app |
| High system CPU | Kernel work: networking, many syscalls | Per-process syscall and interrupt tools |
| High I/O wait | Storage latency or saturation | iostat, iotop, check disk and RAID health |
| High steal time (virtual machines) | Oversubscribed host | Compare over time, ask the provider |
| Low CPU but high load | Processes blocked on I/O or locks | List tasks in uninterruptible state |
| Heavy swapping | Memory pressure | free, vmstat, per-process memory |
Do not skip this classification. It saves you from tuning the wrong thing.
Step Three: Drill Into the Suspect Resource
CPU-bound. Identify the top processes. Is it the expected application, a runaway script, a stuck process in a loop or a security problem such as an unknown process consuming cycles? Check how it started and who owns it. For your own application, profiling tools or application metrics show which function or query is responsible.
Memory-bound. Use free and vmstat to see available memory and swap in and out rates. Constant swapping makes everything slow because storage is far slower than RAM. Look for a process whose memory grows steadily, which suggests a leak, or for too many worker processes configured relative to available memory. The kernel log may show out-of-memory kills.
Disk-bound. iostat reports utilization, queue sizes and latency per device. A device pinned at high utilization with rising latency is saturated. Find which processes cause the writes or reads, since backups, log floods, database checkpoints or an index rebuild are common culprits. Also check for failing hardware: kernel messages about I/O errors, or a degraded RAID array, can explain unexplained slowness.
Network-bound. Check interface errors and drops, connection counts, and whether slowness appears only when the server talks to a remote dependency. A slow DNS resolver or an unreachable external API can stall many processes at once, producing high load with little actual work.
Database-related. If the application waits on its database, check for slow queries, lock contention and too many connections. Most database engines can log slow queries and show active sessions. Often a single missing index or a runaway query is responsible.
A Hypothetical Example
A team notices that their server’s load average sits well above its core count, yet the CPU graph looks modest. Using the process viewer, they see I/O wait is high. iostat shows the data disk is nearly saturated with writes. Looking at which process is writing, they find a logging component that was switched to very verbose output during a debugging session and never reset. The log file is growing quickly and the application is blocking on log writes.
They set the log level back, rotate the oversized file and the load falls within minutes. They then add an alert on disk write latency and a reminder in their change process to revert temporary debug settings. Without classifying the bottleneck first, they might have wasted hours adding CPU capacity that would not have helped.
Capture Evidence Before You Fix
If the problem is intermittent, record data while it happens. Save snapshots of process lists, memory and disk statistics to a file, or use a monitoring system that retains history, so you can compare a bad moment against a normal one. Restarting a service often clears the symptom and destroys the clues, so capture first when the situation allows.
Make Fixes Deliberately
Change one thing at a time and measure the effect. Tuning many parameters at once makes it impossible to know what helped. Prefer fixing root causes, such as a bad query or a leaking worker, over simply adding hardware, though adding capacity is legitimate when the workload has genuinely grown. Document what you found so the next person can recognize the pattern.
Frequently Asked Questions
What load average is too high? There is no universal number. Compare it with core count, check the trend and, more importantly, see whether users are actually affected.
Why is my load high but CPU usage low? Probably many tasks are blocked waiting on disk or network storage. Check I/O wait and processes in uninterruptible sleep.
Does adding RAM fix a slow server? Only if memory pressure is the cause. If the system is not swapping and has plenty of available memory, extra RAM will not help.
Could a security issue cause these symptoms? Yes, unexpected processes using CPU or network can indicate compromise. If something looks unfamiliar, investigate its origin and consult your security process.
How do I find the cause of brief spikes? Use monitoring with fine-grained history or run a short sampling loop that logs process and I/O statistics, then compare it against the spike times.
Next Step
Next time the server is healthy, run top, vmstat and iostat and save the output as your baseline. When a slowdown happens, comparing against that baseline will shorten the diagnosis considerably.
By CRMServerBase Editorial · Updated November 4, 2026
- load average
- performance troubleshooting
- Linux performance
- bottleneck analysis