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:

Bash
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:

Bash
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:

Bash
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:

Bash
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:

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

Bash
free -h

The -h flag gives human-readable output in MB/GB. Here is what a typical result looks like:

Output
              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:

Bash
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:

Bash
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:

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:

Bash
df -h

Sample output:

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:

Bash
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:

Bash
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:

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.