How to Check Server Resource Usage: CPU, RAM, and Disk Explained
If your server feels sluggish, your app keeps crashing, or response times have crept up, the answer almost always sits in three places: CPU, RAM, or disk. Knowing how to read these resources is fundamental for anyone managing a dedicated server, and it is a skill that saves hours of blind troubleshooting.
This guide walks you through exactly how to check each one on both Linux and Windows Server using commands that actually work, complete with a plain English explanation of what the output means. Every command here is verifiable and runs on standard distributions without third party tools.
Why This Matters Before You Start
A server under strain rarely crashes immediately. It slows down quietly. Queries take longer, pages time out, and processes queue up. By the time something falls over, the damage is already done.
Checking resources proactively helps you catch runaway processes early, understand whether you need to scale, diagnose performance issues at the root, and plan capacity before a traffic spike causes an outage. It also gives you a baseline. Once you know what normal looks like on your server, spotting abnormal becomes fast and obvious.
1. How to Check CPU Usage
Linux
The fastest command to see real-time CPU activity:
top
At the top of the output, look for the %Cpu(s) line. The values that matter most are:
- us: CPU time spent on your applications (user space).
- sy: Kernel and system processes.
- id: Idle percentage (you want this high).
- wa: I/O wait. If this is high, the bottleneck is usually your disk, not the CPU.
For a cleaner, colour-coded view with per-core bars, install htop:
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
htop
htop is sortable, scrollable, and lets you kill processes interactively, making it far more practical than top during a live incident.
To see per-core usage without an interactive view:
mpstat -P ALL 1
This prints stats for every core, refreshed each second. If one core is pegged at 100% while others are idle, you have a single-threaded bottleneck. This is common with older PHP apps or unoptimised database queries.
For a quick snapshot of load average:
uptime
The load average is shown over 1, 5, and 15 minutes. A load average higher than your core count means processes are waiting in the queue, not just running.
What is healthy? Sustained CPU usage above 80% to 85% is a warning. A load average that consistently exceeds your core count needs attention.
Windows Server
Open Task Manager (Ctrl + Shift + Esc) and navigate to Performance > CPU. You will see overall utilisation, base clock speed, and core count.
For scripted or automated checks, use PowerShell:
(Get-WmiObject Win32_Processor).LoadPercentage
This returns a single integer representing the current CPU load percentage, making it clean and easy to pipe into a monitoring script.
2. How to Check RAM Usage
Linux
free -h
The -h flag gives human-readable output in MB/GB. Here is what a typical result looks like:
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 2.1Gi 310Mi 8.9Gi 10.5Gi
Swap: 2.0Gi 140Mi 1.9Gi
Do not panic about the "free" column being low. Linux uses spare RAM for disk caching, which is intentional and improves performance. The column you actually care about is available. That is the memory your applications can claim without the kernel needing to reclaim cache.
To watch memory in real time and catch swap activity:
vmstat 2 5
This runs five samples two seconds apart. Watch the si (swap in) and so (swap out) columns. If those are non-zero consistently, your server is running low on physical RAM and actively offloading to swap, which is slow and means it is time to either tune your applications or add RAM.
For a full breakdown of every memory component:
cat /proc/meminfo
Healthy threshold: If available memory consistently sits below 10% to 15% of total and swap is in active use, you need to act.
Windows Server
Task Manager > Performance > Memory gives you In Use, Standby, and Available memory with a visual timeline.
Via PowerShell:
Get-CimInstance Win32_OperatingSystem | Select-Object `
@{Name="Total_GB";Expression={[math]::Round($_.TotalVisibleMemorySize/1MB,2)}}, `
@{Name="Free_GB";Expression={[math]::Round($_.FreePhysicalMemory/1MB,2)}}
This returns total and free physical memory in gigabytes, perfectly readable, scriptable, and accurate.
3. How to Check Disk Usage
Linux
To see used and available space across all mounted filesystems:
df -h
Sample output:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 23G 25G 48% /
/dev/sdb1 200G 161G 32G 83% /data
The Use% column is your primary signal. When a filesystem hits 90% or higher, things start failing silently. Log writes stop, databases throw errors, and cron jobs crash without an obvious reason.
To find what is consuming the most space inside a specific directory:
du -sh /var/* 2>/dev/null | sort -rh | head -10
This lists the ten largest items under /var sorted by size. Swap /var for any path you want to investigate. Bloated log files and accumulated database dumps are usually the culprit.
To check disk I/O performance rather than space:
iostat -x 1
Look at %util. Values near 100% mean the disk is saturated. The await column shows average milliseconds per I/O request. On a well-performing SSD, this should be under 5ms. On an HDD under heavy write load, you may see 50ms to 100ms+, which directly translates to slow application response times.
Windows Server
Via PowerShell:
Get-WmiObject Win32_LogicalDisk | Select-Object DeviceID, `
@{Name="Size_GB";Expression={[math]::Round($_.Size/1GB,2)}}, `
@{Name="Free_GB";Expression={[math]::Round($_.FreeSpace/1GB,2)}}
This gives a clean per-drive breakdown. You can drop this into a scheduled task to log disk trends over time.
Quick Reference: Thresholds Worth Knowing
| Resource | Metric | Attention Needed | Act Now |
|---|---|---|---|
| CPU | Sustained usage | Above 80% | Above 95% |
| CPU | Load average | Above core count | 2× core count |
| RAM | Available memory | Below 15% | Below 5% |
| RAM | Swap I/O | Any consistent activity | Heavy ongoing swap |
| Disk | Filesystem usage | Above 75% | Above 90% |
| Disk | I/O utilisation (%util) | Above 70% | Above 90% |
These are starting points, not hard rules. A busy database server runs hotter than a static file server. Learn your baseline first so you will immediately recognise when something is wrong.
Going Beyond One-Off Commands
Manual commands are fine for diagnosing a live issue. For production environments, you want continuous visibility.
A few solid options include:
- Netdata: Lightweight real-time monitoring with a built-in web UI, zero configuration needed, and per-second granularity out of the box.
- Glances: One command gives you CPU, RAM, disk, and network in a single terminal view. Ideal for quick remote checks.
- Prometheus + Grafana: The standard stack for persistent metrics collection and custom dashboards.
- Zabbix: Full enterprise monitoring for multi-server environments with alerting built in.
Most dedicated server control panels also include basic resource graphs. These are useful for spotting trends over days or weeks rather than just point-in-time snapshots.
Summary
If you take nothing else from this guide, remember these three commands:
- top for CPU usage in real-time
- free -h for RAM at a glance
- df -h for disk space by filesystem
Run them in under thirty seconds and you will immediately know if your server has a resource problem. From there, layer in htop, iostat, and eventually a monitoring stack as your setup grows.
Every experienced sysadmin has diagnosed a 2 AM incident by running exactly these three commands. The difference between a 5-minute fix and a 3-hour outage often comes down to knowing where to look first. Understanding your resource baseline is the first step to diagnosing problems faster, planning upgrades before they become urgent, and keeping your services reliably online.
Fit Servers provides dedicated bare metal servers with full root access, giving you complete control to monitor, tune, and configure your infrastructure exactly the way you need it. View our dedicated servers today.