Tutorial 📅 January 21, 2025 📖 8 min read

VPS Server Monitoring: Track CPU, RAM, Disk Usage (2025)

Complete guide to VPS resource monitoring. Track CPU, RAM, disk, and network usage. Set up alerts and optimize performance without terminal.

Your VPS is running smoothly... until suddenly it's not. Your website crashes during a traffic spike. Your database slows to a crawl. You're out of disk space and don't know why. Sound familiar?

Without proper monitoring, you're flying blind. You won't know your server is struggling until users start complaining - and by then, you've already lost traffic, sales, and trust.

This comprehensive guide will teach you everything about VPS resource monitoring: what to monitor, which tools to use, how to set up alerts, how to interpret metrics, and most importantly - how to optimize your server based on what you discover. No terminal expertise required.

Why Monitor Your VPS?

1. Prevent Downtime Before It Happens

Monitoring reveals problems before they become outages. If you see RAM usage climbing toward 100% over several days, you can upgrade before your server crashes.

2. Optimize Performance

Discover which processes consume the most resources. That rogue cron job eating 80% CPU? You'll spot it immediately and fix it.

3. Plan Capacity

Historical data shows when you need to upgrade. If CPU averages 75% during business hours, it's time for more cores before you hit limits.

4. Troubleshoot Issues

When something goes wrong, monitoring data reveals exactly what happened. Did traffic spike? Did a process crash? Metrics tell the story.

5. Cost Optimization

Paying for a 4GB VPS but only using 1.5GB? Downgrade and save money. Monitoring prevents over-provisioning.

Real-World Example: An e-commerce site noticed CPU spikes every morning at 3 AM through monitoring. Investigation revealed a poorly optimized backup script. After optimization, server load dropped 60% and page load times improved by 40%.

What to Monitor: The Essential Metrics

1. CPU Usage

What it measures: Processor utilization percentage

Normal range: 10-50% average, spikes to 80% acceptable

Warning signs: Sustained 80%+ usage, load average > CPU cores

What it indicates: Processing power consumption - high usage means your server is working hard on computational tasks

2. RAM (Memory) Usage

What it measures: Memory consumption and availability

Normal range: 50-70% usage (Linux caches aggressively, this is normal)

Warning signs: 90%+ usage, swap usage increasing

What it indicates: Memory pressure - when RAM fills up, the system uses slow disk swap, causing severe performance degradation

3. Disk Usage

What it measures: Storage space utilization

Normal range: Below 80% capacity

Warning signs: 90%+ full, rapid growth rate

What it indicates: Storage health - full disks can crash applications and prevent system updates

4. Disk I/O (Input/Output)

What it measures: Read/write operations per second

Normal range: Varies by workload, watch for patterns

Warning signs: I/O wait time > 20%, sustained high IOPS

What it indicates: Disk performance bottleneck - common with databases doing many reads/writes

5. Network Traffic

What it measures: Inbound/outbound bandwidth usage

Normal range: Depends on your application

Warning signs: Approaching bandwidth cap, unusual traffic patterns

What it indicates: Traffic patterns - spikes might indicate DDoS attacks or viral content

6. Load Average

What it measures: Number of processes waiting for CPU time

Normal range: Below number of CPU cores (2 core VPS should be < 2.0)

Warning signs: Load > cores for extended periods

What it indicates: System stress level - high load means processes are queued waiting for resources

7. Process Count

What it measures: Number of running processes

Normal range: 50-200 for typical VPS

Warning signs: Unusual spikes or steady growth

What it indicates: May reveal process leaks or attacks

Quick Monitoring Commands (Terminal)

Before installing monitoring tools, here are essential commands for immediate insights:

Overall System Status

htop

Interactive process viewer showing CPU, RAM, and running processes. Press F10 to exit.

CPU Usage

top -bn1 | head -20

Shows CPU usage breakdown and top processes.

Memory Usage

free -h

Displays RAM and swap usage in human-readable format.

Disk Space

df -h

Shows disk space usage for all mounted filesystems.

Disk Usage by Directory

du -sh /* | sort -rh | head -10

Reveals which directories consume the most space.

Disk I/O Statistics

iostat -x 2 5

Shows disk read/write performance every 2 seconds, 5 times.

Network Traffic

vnstat

Displays network traffic statistics (requires installation: sudo apt install vnstat).

Load Average

uptime

Shows system uptime and load averages (1, 5, and 15 minutes).

Top 10 CPU Consuming Processes

ps aux --sort=-%cpu | head -11

Top 10 Memory Consuming Processes

ps aux --sort=-%mem | head -11

Monitor Without Terminal Commands

VPS Commander provides real-time dashboards displaying all these metrics visually. No need to remember commands or interpret raw terminal output. See CPU, RAM, disk, and network usage at a glance with beautiful charts and graphs.

Try VPS Commander Free

Monitoring Tools Comparison

Tool Type Best For Cost Difficulty
VPS Commander Web Interface Beginners, visual monitoring $2.99/mo ⭐ Easy
htop CLI Real-time process monitoring Free ⭐⭐ Moderate
Netdata Web Dashboard Detailed real-time metrics Free ⭐⭐ Moderate
Grafana + Prometheus Advanced Dashboard Professional monitoring Free ⭐⭐⭐⭐ Hard
Datadog Cloud Service Enterprise monitoring $15+/mo ⭐⭐⭐ Moderate
New Relic Cloud Service Application monitoring Free tier + paid ⭐⭐⭐ Moderate
Zabbix Self-hosted Multiple servers Free ⭐⭐⭐⭐ Hard

Netdata is an excellent free monitoring tool with a beautiful web interface, zero configuration, and real-time metrics.

Install Netdata

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

The installer automatically configures everything. Wait 2-3 minutes for installation to complete.

Access Netdata Dashboard

Open your browser and navigate to:

http://your_vps_ip:19999

You'll see a real-time dashboard with dozens of metrics updating every second.

Secure Netdata with Nginx Reverse Proxy

To add authentication and HTTPS, configure Nginx as a reverse proxy:

sudo apt install nginx apache2-utils -y

# Create authentication file
sudo htpasswd -c /etc/nginx/.htpasswd admin

# Create Nginx config
sudo nano /etc/nginx/sites-available/netdata

Add this configuration:

upstream netdata {
    server 127.0.0.1:19999;
    keepalive 64;
}

server {
    listen 80;
    server_name monitoring.yourdomain.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://netdata;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

Enable and test:

sudo ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Now access Netdata at http://monitoring.yourdomain.com with username/password protection.

Method 2: Set Up Prometheus + Grafana (Advanced)

For professional-grade monitoring with custom dashboards and long-term metrics storage:

Install Prometheus

wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvfz prometheus-2.48.0.linux-amd64.tar.gz
sudo mv prometheus-2.48.0.linux-amd64 /opt/prometheus
cd /opt/prometheus

Install Node Exporter (Metrics Collection)

wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/

Install Grafana

sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt update
sudo apt install grafana -y
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Access Grafana at http://your_vps_ip:3000 (default login: admin/admin).

Note: Full Prometheus + Grafana setup is complex and requires significant configuration. Consider using Netdata or VPS Commander for simpler solutions.

Setting Up Alerts

Monitoring is only useful if you're notified when something goes wrong. Set up alerts for critical thresholds:

Alert Thresholds to Configure

Simple Alert Script (Email Notification)

Create a monitoring script:

sudo nano /usr/local/bin/monitor-alerts.sh

Add this content:

#!/bin/bash

EMAIL="your_email@example.com"
HOSTNAME=$(hostname)

# Check CPU usage
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$CPU > 80" | bc -l) )); then
    echo "High CPU usage: $CPU%" | mail -s "Alert: High CPU on $HOSTNAME" $EMAIL
fi

# Check RAM usage
RAM=$(free | grep Mem | awk '{print ($3/$2) * 100.0}')
if (( $(echo "$RAM > 90" | bc -l) )); then
    echo "High RAM usage: $RAM%" | mail -s "Alert: High RAM on $HOSTNAME" $EMAIL
fi

# Check disk space
DISK=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
if [ $DISK -gt 85 ]; then
    echo "Low disk space: $DISK% used" | mail -s "Alert: Low Disk Space on $HOSTNAME" $EMAIL
fi

Make executable and schedule:

sudo chmod +x /usr/local/bin/monitor-alerts.sh
sudo crontab -e

Add (runs every 5 minutes):

*/5 * * * * /usr/local/bin/monitor-alerts.sh

Netdata Built-in Alerts

Netdata includes hundreds of pre-configured alerts. Configure email notifications:

sudo nano /etc/netdata/health_alarm_notify.conf

Configure email settings and restart Netdata:

sudo systemctl restart netdata

Interpreting Monitoring Data

Understanding CPU Metrics

User CPU: Time spent on user processes (your applications)

System CPU: Time spent on kernel operations

I/O Wait: Time waiting for disk operations - high values indicate disk bottleneck

Idle: Time doing nothing - higher is better!

What to do if CPU is high:

Understanding RAM Metrics

Used: RAM actively used by processes

Cached: RAM used for disk cache (automatically freed when needed - this is GOOD)

Available: RAM that can be allocated to processes (includes cache)

Swap: Disk space used as virtual RAM (SLOW - avoid using swap)

What to do if RAM is high:

Understanding Disk Metrics

Read/Write MB/s: Data transfer rate

IOPS: Input/Output operations per second

I/O Wait %: Time CPU waits for disk - high values = disk bottleneck

Queue Length: Number of pending I/O operations

What to do if disk I/O is high:

Common Performance Issues and Solutions

Issue 1: High CPU Usage

Symptoms: CPU consistently above 80%, slow response times

Diagnosis:

htop
# Sort by CPU% (press F6, select CPU%)

Common Causes:

Solutions:

Issue 2: High RAM Usage / Swap Activity

Symptoms: Sluggish performance, high swap usage, OOM (Out of Memory) killer terminating processes

Diagnosis:

free -h
ps aux --sort=-%mem | head -20

Common Causes:

Solutions:

Issue 3: Disk Space Full

Symptoms: Applications crash, can't write files, system warnings

Diagnosis:

df -h
du -sh /* | sort -rh | head -20
sudo du -sh /var/log/*

Common Causes:

Solutions:

Issue 4: High Disk I/O Wait

Symptoms: Slow database queries, application timeouts, high I/O wait percentage

Diagnosis:

iostat -x 2 10
iotop  # Shows which processes generate I/O

Common Causes:

Solutions:

Performance Optimization Based on Metrics

Scenario 1: High Traffic Website

Monitoring shows: CPU 70%, RAM 80%, many PHP-FPM processes

Optimizations:

Scenario 2: Database-Heavy Application

Monitoring shows: High disk I/O, slow queries, RAM at 85%

Optimizations:

Scenario 3: API Server

Monitoring shows: CPU spikes during peak hours, variable response times

Optimizations:

Automated Performance Optimization

VPS Commander analyzes your monitoring data and provides actionable optimization recommendations. Get alerts when resources are constrained, identify bottlenecks visually, and apply optimizations with one click - no terminal expertise required.

Get VPS Commander

Monitoring Best Practices

1. Establish Baselines

Monitor for 1-2 weeks to understand normal patterns. This helps distinguish problems from normal fluctuations.

2. Monitor Trends, Not Just Snapshots

A single spike isn't concerning. Sustained trends indicate real problems.

3. Set Appropriate Alert Thresholds

Too sensitive = alert fatigue. Too relaxed = miss critical issues. Adjust based on experience.

4. Document Normal Behavior

Know your server's normal CPU during peak hours, expected RAM usage, typical disk growth rate.

5. Review Metrics Regularly

Schedule weekly reviews of monitoring data. Spot problems before they become emergencies.

6. Correlate Metrics with Events

When traffic spikes, CPU should spike. If CPU spikes without traffic increase, investigate.

7. Keep Historical Data

Retain at least 30 days of metrics for trend analysis and capacity planning.

8. Monitor Application-Level Metrics Too

Server metrics tell part of the story. Also monitor application response times, error rates, and user experience.

When to Upgrade Your VPS

Monitoring data reveals when you've outgrown your current resources:

Upgrade CPU When:

Upgrade RAM When:

Upgrade Disk When:

Upgrade Disk Speed When:

Conclusion: Make Monitoring a Habit

VPS monitoring isn't optional - it's essential for maintaining reliable, performant servers. The best time to start monitoring was when you first launched your VPS. The second best time is now.

Key takeaways:

With proper monitoring in place, you'll prevent 90% of performance issues before they impact users. You'll make data-driven decisions about upgrades and optimizations. And most importantly, you'll sleep better knowing that if something goes wrong, you'll be alerted immediately.

Whether you choose Netdata's free dashboard, invest in professional tools like Datadog, or use VPS Commander's integrated monitoring, the important thing is to start monitoring today. Your users (and your stress levels) will thank you.

Related Articles