Linux Resource Bottleneck Diagnosis Checklist
A Linux server becomes slow when one or more resources are constrained. CPU, RAM, disk I/O, disk space, network and process limits can all create different symptoms.
Core principle
A bottleneck is the limiting resource. Fixing the wrong resource wastes time. First identify whether the system is limited by CPU, memory, disk, network or application behavior.
Checklist
- Record the symptom and time.
- Check CPU load.
- Check memory and swap.
- Check disk usage.
- Check disk I/O if tools are available.
- Check top processes.
- Check network connectivity.
- Check service logs around the incident time.
- Connect resource usage to a workload.
- Apply the smallest targeted mitigation.
Reusable lesson
This applies to WordPress slowness, PHP-FPM overload, MySQL high load, Docker pressure, backup jobs, crawlers, video generation and AI automation stacks.
When to Use This Checklist
Use this checklist when a Linux VPS becomes slow, unstable, overloaded or unable to serve websites or automation workloads reliably.
Required Tools
SSH access, top, free, df, ps, logs, monitoring data, incident time
Before You Start
Do not upgrade the VPS before identifying which resource is actually limiting the system.
Structured Checklist Steps
- Record symptom.
- Check CPU.
- Check RAM.
- Check swap.
- Check disk.
- Check I/O if possible.
- Find top processes.
- Check network.
- Map workload.
- Apply targeted mitigation.
Verification Steps
- Bottleneck resource is identified.
- Top workload is known.
- Logs support the diagnosis.
- Mitigation reduces pressure.
- Capacity decision is evidence-based.
Rollback Plan
If a mitigation breaks a service, revert the change and reduce pressure using a safer method such as pausing a job, scaling down workers or scheduling maintenance.
Common Mistakes
- Assuming all slowness is CPU.
- Ignoring swap.
- Ignoring disk I/O.
- Restarting everything without diagnosis.
- Upgrading capacity without measuring.
Related Commands
uptime
top
free -h
swapon --show
df -h
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
sudo tail -n 100 /var/log/nginx/error.log