
Understanding vmstat: A Practical Guide to Memory and CPU Stats
Table of Contents
- What’s This Article About?
- The Dramatic Situation: When Servers Go Rogue
- Why
vmstat
Matters: The Hidden Hero - How Does
vmstat
Work? (And How To Get It Running Fast) - Use Cases Tree: Where
vmstat
Shines (and Why You Care) - Quick Setup: Step-By-Step Guide To
vmstat
Mastery - Mini Glossary: Real-Talk Definitions
- Examples, Cases & The Comic Metaphor Table
- Beginner Mistakes & Common Myths
- Use This If… Decision Tree (Should You
vmstat
?) - Stats, Comparisons & Unconventional Fun Facts
- Scripting Magic: Automation With
vmstat
- Fictionalized Admin Story: The Night The Swap Swapped Back
- Conclusion: Why (And Where) To Use
vmstat
What’s This Article About?
If you run a server—cloud, Docker, VPS, or your own dedicated metal—performance matters. You want your code to fly. Your site to load. Your app to scale. But what happens when things slow down? In this post, we’re going deep on one of the most underrated tools in the Linux admin’s toolbox: vmstat
. We’ll break down what it shows, why it matters, and how to actually use it (without drowning in man pages).
We’ll cover how vmstat
can save your bacon when your server is acting up, demystify memory and CPU stats, and give you scripts and real-world tips to get you from “What does this even mean?” to “Aha! Found the problem!” in minutes. Whether you’re a coder, sysadmin, or DevOps wrangler, you’ll leave knowing how to use vmstat
like a pro.
The Dramatic Situation: When Servers Go Rogue
Picture this: It’s 2 AM. Your phone buzzes—your site is down. The load average is climbing like a rocket. Users are angry, bosses are panicking, and you’re staring at a wall of SSH terminals trying to figure out if it’s memory, CPU, IO, or just gremlins in the wires.
The logs are cryptic. top
looks like a slot machine. You run free -m
, but nothing makes sense. You need answers now.
Enter vmstat
: the no-nonsense, old-school UNIX utility that slices through the chaos. Let’s see how it helps you crush these late-night emergencies (and maybe sleep better tomorrow).
Why vmstat
Matters: The Hidden Hero
- It’s universal. Almost every Linux distro, BSD variant, and Unix box has it. No install drama.
- It’s fast. One command, instant snapshot of memory, swap, IO, CPU, and system processes.
- It’s scriptable. Use it in cron jobs, dashboards, or one-off troubleshooting.
- It’s honest. No fancy graphics. Just the facts—so you spot root causes, not just symptoms.
Bottom line: vmstat
is the sysadmin’s bug-hunting flashlight. Let’s see how it works.
How Does vmstat
Work? (And How To Get It Running Fast)
Under The Hood: Algorithms & Structure
vmstat
(short for virtual memory statistics) is a thin wrapper around the Linux kernel’s procfs (/proc
) statistics. It reads memory, swap, IO, and CPU stats directly from the kernel, then dumps those numbers in columns.
- Memory: Shows what’s free, what’s used, and what’s swapped.
- Processes: Tells you about running and blocked processes (hello, bottlenecks!).
- CPU: Breaks down CPU time (user, system, idle, wait, etc).
- IO: Reports on disk activity, swap in/out, and more.
It’s like a “live health check” for your server internals.
How To Run vmstat
(Zero Fuss)
- Check if it’s there: Just type
vmstat
in your shell. - If you see “command not found”, install it:
- Debian/Ubuntu:
sudo apt-get install procps
- CentOS/Fedora:
sudo yum install procps-ng
- Alpine:
sudo apk add procps
- Debian/Ubuntu:
- Basic usage:
vmstat 1 5
(updates every second, five times) - See all the columns:
man vmstat
(but stick with us, we’ll translate the jargon below!)
Use Cases Tree: Where vmstat
Shines (and Why You Care)
- Diagnosing server slowdowns
- Is it memory? (Check swap and free memory columns)
- Is it IO? (Check bi/bo and wa columns)
- Is it CPU-bound? (us, sy, id columns)
- Tracking memory leaks
- Long-running apps slowly eating RAM?
vmstat
makes the leak visible!
- Long-running apps slowly eating RAM?
- Capacity planning
- Gather historical data before scaling up (or down) your VPS or dedicated server.
- Automated monitoring scripts
- Trip alerts when swap usage or blocked processes spike.
- Performance tuning
- Did your sysctl/vm tweaking actually help?
vmstat
shows the impact right away.
- Did your sysctl/vm tweaking actually help?
- Docker/VM troubleshooting
- Pinpoint whether the problem is in the container or the underlying host.
Want to experiment on your own clean slate? Spin up a VPS or dedicated server for hands-on play!
Quick Setup: Step-By-Step Guide To vmstat
Mastery
- Install
vmstat
(if missing):- Ubuntu/Debian:
sudo apt-get install procps
- CentOS/Fedora:
sudo yum install procps-ng
- Ubuntu/Debian:
- Get a quick snapshot:
vmstat
- Monitor live stats:
vmstat 2
(updates every 2 seconds, forever—Ctrl+C to stop) - Analyze for specific duration:
vmstat 1 10
(updates every second, 10 times) - Check column meanings:
man vmstat
(or see our Glossary below!) - Log for later:
vmstat 5 60 > vmstat.log
(every 5 seconds, 5 minutes) - Find a memory or IO bottleneck:
- Look for high
si
(swap in) /so
(swap out) – means you’re swapping: RAM is exhausted. - High
wa
(CPU waiting for IO) – slow disks or NFS. - Low
id
(CPU idle) and highus
/sy
– CPU is the bottleneck.
- Look for high
Pro tip: For Docker users, run vmstat
inside your container and on the host. Compare the two!
Mini Glossary: Real-Talk Definitions
- procs – r: “Ready to run” processes (like people in line at a coffee shop).
- procs – b: Blocked processes (waiting for IO—think of folks who ordered something the barista has to go find).
- swpd: Amount of swap used (MB or KB, depending on system).
- free: RAM not used at all (but “used” can be misleading—see below!)
- buff/cache: Memory used for OS buffers/cache (can usually be freed quickly).
- si / so: Swap in / swap out (if these are >0 for long, you’re in swap hell).
- bi / bo: Blocks in/out—disk reads/writes per second.
- us / sy: CPU spent on userland/system (kernel) processes.
- id: CPU idle percentage.
- wa: CPU waiting for IO (disks, network).
Examples, Cases & The Comic Metaphor Table
Positive Case: The Heroic Save
Case: App is crawling. vmstat 1
shows:
si/so
is high — your server is thrashing swap.free
is nearly zero — RAM is gone.
Action: Kill a memory hog, restart a leaking process, or upgrade to a bigger VPS.
Result: App speeds up, users cheer, you get sleep.
Negative Case: The Red Herring
Case: App is slow, but vmstat
shows:
id
is 90+% — CPU is mostly idle.wa
is high — CPU is waiting for IO.bi/bo
spikes — lots of disk activity.
Moral: It’s not CPU or RAM—your disk (or NFS, or cloud storage) is the villain.
Comic Metaphor Table: The vmstat
Superhero League
- Swapman (
si/so
): Jumps in only when RAM is exhausted. If he’s at the party, the party is probably on fire. - Captain Idle (
id
): Kicking back, everything’s chill. - Disk Dynamo (
bi/bo
): Running laps—if he’s sweating, your disks are too. - Waitwoman (
wa
): Tapping foot, waiting for the slowpoke disk. - The Blocked Avenger (
b
): Stuck in limbo—IO or resource starved.
Assemble the team: If everyone’s working overtime, your server’s about to call for backup.
Beginner Mistakes & Common Myths
- Myth: “Low ‘free’ RAM means I’m out of memory!”
Reality: Linux uses free RAM for cache/buffers. Low ‘free’ is usually fine—look at swap activity instead. - Mistake: Only looking at the first line of
vmstat
.
Tip: The first line is averages since boot. Use intervals (vmstat 1
) for real-time stats. - Myth: “High CPU usage is always bad.”
Reality: Highus
(user CPU) can be normal for busy servers. Worry ifwa
(wait) orsy
(system) is high. - Mistake: Not correlating
vmstat
with app logs ortop
.
Tip: Use all your senses! Combine tools for the full picture.
Use This If… Decision Tree (Should You vmstat
?)
Problem: Server is slow or unstable.
Should I use vmstat
?
- ⬇️ Is the server Linux, BSD, or Unix? → Yes: Try
vmstat
! - ⬇️ Need to know if RAM, CPU, or IO is the issue? → Yes:
vmstat
is perfect. - ⬇️ Need pretty graphs or historical charts? → No: Try Netdata or Grafana.
- ⬇️ On Mac? → No native
vmstat
(buttop
orvm_stat
are similar). - ⬇️ Need per-process details? → No: Use
top
orhtop
.
Stats, Comparisons & Unconventional Fun Facts
- Compared to
top
:vmstat
is less “busy” and focuses on trends, not per-process detail. - Compared to
free
:vmstat
adds CPU, swap, and IO stats. It’s like “free++”. - Compared to
sar
:sar
is historical/aggregated;vmstat
is live and simple. - Fun Fact:
vmstat
was first released in 1980s UNIX. It’s older than the World Wide Web. - Unconventional Use: Pipe
vmstat
intoawk
to build custom alerts:
# Example: Alert if swap used exceeds 100 MB
vmstat 5 | awk '{if ($3 > 100000) print "Swap usage high: " $3 " KB"}'
Scripting Magic: Automation With vmstat
Basic shell script to email yourself if swap spikes:
#!/bin/bash
THRESHOLD=100000 # 100 MB
vmstat 1 2 | tail -1 | awk '{if ($3 > ENVIRON["THRESHOLD"]) system("echo Swap high: " $3 " | mail -s 'Swap Alert' admin@example.com")}'
Integrate with monitoring tools: Many Prometheus exporters, Zabbix agents, and custom dashboards just run vmstat
under the hood.
- Automate daily snapshots with cron:
0 * * * * vmstat 60 1 >> /var/log/vmstat_hourly.log
Fictionalized Admin Story: The Night The Swap Swapped Back
3:12 AM. The database VM at “Acme Corp” falls over. Senior admin is unreachable. Junior admin, Alex, SSHes in and runs top
—but the culprit is unclear. Suddenly remembers this blog post, types vmstat 2
.
Swap columns are rocketing up. Alex kills an ancient, leaky Java process, swap drops, load average plummets, and the site comes back online. Boss sends a virtual high-five. Alex now runs vmstat
every time something’s weird—and so should you.
Conclusion: Why (And Where) To Use vmstat
- Why? It’s the fastest, clearest way to see if your server’s problem is memory, CPU, or IO. No fluff, no fuss.
- How? Just
vmstat 1
and look for spikes in swap, high wait time, or blocked processes. Use it in scripts, cron jobs, or by hand in emergencies. - Where? Any Linux/BSD/Unix server, VM, VPS, Docker host, or even embedded device with a shell.
Next time your server acts up—don’t guess. Run vmstat
. And if you want to experiment risk-free, or need more power for your projects, order a VPS or dedicated server at MangoHost and see what vmstat
can reveal!
Official docs: https://man7.org/linux/man-pages/man8/vmstat.8.html

This article incorporates information and material from various online sources. We acknowledge and appreciate the work of all original authors, publishers, and websites. While every effort has been made to appropriately credit the source material, any unintentional oversight or omission does not constitute a copyright infringement. All trademarks, logos, and images mentioned are the property of their respective owners. If you believe that any content used in this article infringes upon your copyright, please contact us immediately for review and prompt action.
This article is intended for informational and educational purposes only and does not infringe on the rights of the copyright owners. If any copyrighted material has been used without proper credit or in violation of copyright laws, it is unintentional and we will rectify it promptly upon notification. Please note that the republishing, redistribution, or reproduction of part or all of the contents in any form is prohibited without express written permission from the author and website owner. For permissions or further inquiries, please contact us.