How to Monitor CPU, RAM, and Disk on Your Server
Guide to monitoring Minecraft server resources including CPU usage, RAM consumption, disk I/O, TPS, and network traffic using free tools and in-game commands.
Why Monitoring Matters
A Minecraft server does not crash without warning. TPS drops, RAM creep, disk I/O spikes, and CPU saturation all leave traces before they cause visible lag. If you monitor minecraft server resources proactively, you catch problems before your players notice them. Monitoring also helps you right-size your hardware: are you paying for 16 GB of RAM but only using 6 GB? Is your CPU at 30% or 90%? Data answers these questions.
In-Game Monitoring
Spark
Spark is the best in-game profiling and monitoring plugin for Minecraft. Install the Spark plugin on Paper, Purpur, Fabric, or Forge, and you get:
/spark tpsto view current TPS and tick time./spark healthto see CPU usage, RAM usage, and disk space./spark profilerto run a detailed profiler that identifies which plugins, entities, or chunks are consuming the most tick time./spark heapdumpto analyze memory usage and find memory leaks.
Spark generates shareable web reports. When you run /spark profiler --timeout 60, it profiles for 60 seconds and gives you a URL with an interactive flame graph. This is invaluable for diagnosing lag. If you only install one monitoring tool, make it Spark.
Timings (Paper)
Paper includes a built-in timings system. Run /timings on, wait 10 minutes during peak player activity, then run /timings report. This generates a URL with a detailed breakdown of what consumed server tick time. Spark has largely superseded Timings, but it remains a useful second opinion.
Command-Line Monitoring
If you have SSH access to your server (dedicated, VPS, or self-hosted), command-line tools give you real-time visibility into system resources.
htop
Install with sudo apt install htop. Run htop to see:
- Per-core CPU usage (useful for seeing if the Minecraft main thread is saturating one core)
- Total RAM and swap usage
- Process list sorted by CPU or memory consumption
Look for the Java process. If one CPU core is pegged at 100% while others are idle, your server is hitting the single-thread bottleneck. This means you need a faster CPU, not more cores. See our best CPU guide for upgrade options.
iostat
Install with sudo apt install sysstat. Run iostat -x 5 to monitor disk I/O every 5 seconds. Key metrics:
- %util: How busy the disk is. Above 80% sustained means your disk is a bottleneck.
- await: Average time in milliseconds for I/O requests. Above 10 ms on an SSD or 2 ms on NVMe indicates a problem.
- r/s and w/s: Reads and writes per second. Spikes during auto-save are normal.
If your disk is consistently busy, consider upgrading to NVMe. See our storage comparison for details.
vnstat
Install with sudo apt install vnstat. Run vnstat -l for live bandwidth monitoring or vnstat -m for monthly totals. This tells you exactly how much bandwidth minecraft server traffic is consuming and whether you are approaching any caps.
Grafana + Prometheus Stack
For serious monitoring, set up Grafana with Prometheus. This gives you historical graphs, alerting, and dashboards. The setup involves:
- Prometheus: Scrapes metrics from your server at regular intervals and stores them in a time-series database.
- node_exporter: Exposes system metrics (CPU, RAM, disk, network) to Prometheus.
- Minecraft exporter: Plugins like minecraft-prometheus-exporter expose TPS, player count, entity count, and loaded chunks to Prometheus.
- Grafana: Visualizes Prometheus data in customizable dashboards.
This stack is overkill for a 5-player server but invaluable for larger operations. You can set up alerts (for example, notify on Discord if TPS drops below 18 or RAM usage exceeds 90%) and review historical trends to plan capacity.
Plan Plugin
Plan (Player Analytics) is a Minecraft plugin that tracks player activity, server performance, and resource usage over time. It provides a web dashboard showing TPS history, player sessions, RAM usage trends, and more. It is simpler to set up than the Grafana stack and gives you good enough data for most servers.
Plan stores data in a local SQLite or MySQL database. On busy servers, the database can grow large and impact disk I/O. Monitor minecraft server resources including Plan's own footprint to ensure it is not part of the problem.
See what optimized hardware feels like in game: Astroworld MC, IP play.astroworldmc.com, Java + Bedrock.
What to Watch and When to Act
| Metric | Healthy Range | Action Threshold |
|---|---|---|
| TPS | 19.5 to 20.0 | Below 18.0 sustained |
| CPU (main core) | Under 70% | Above 85% sustained |
| RAM (JVM heap) | Under 80% of Xmx | Above 90% with frequent full GC |
| Disk I/O %util | Under 40% | Above 70% sustained |
| Tick time | Under 40 ms | Above 50 ms (TPS drops below 20) |
When a metric crosses the action threshold, diagnose the cause before throwing more hardware at it. Use Spark to profile, check entity counts, review plugin performance, and optimize JVM flags (see our flags guide) before upgrading your plan.