How much RAM does your VPS need?
Most small servers need 1 to 4 GB. How to estimate memory from what you'll run, then measure a real server to see whether it's too small or too big.
Most small Linux servers need between 1 and 4 GB of RAM: 1 to 2 GB for a VPN, a static site or a small blog, 4 GB for a web app with its database or a handful of Docker containers. Busy sites, CI runners and game servers with more than a few players want 8 GB or more.
Those are starting points. The rest of this page is how to get a better number for your own server, and how to check it once it's running.
Why memory is the number to pick by
A small server almost always runs out of memory before it runs out of CPU or disk. A slow CPU makes things slow. Running out of memory makes things crash: the kernel's out-of-memory killer picks a process, usually the biggest one, which is usually your database.
So size for memory first, and treat CPU and disk as checks afterwards.
Add it up
Start with the system itself. A fresh Ubuntu or Debian server uses a few hundred megabytes. Then add what you plan to run. Rough figures for a small, lightly used setup:
| What | Memory to allow |
|---|---|
| nginx or Caddy serving a static site | Tens of MB |
| WireGuard VPN | Almost nothing |
| WordPress (nginx, PHP-FPM, MariaDB), small site | 512 MB to 1 GB |
| A Node.js, Python or Ruby web app | 100 to 500 MB per process |
| PostgreSQL or MariaDB, small database | 256 MB to 1 GB |
| Docker itself | About 100 MB, plus each container |
| n8n | 512 MB to 1 GB, more with heavy workflows |
| Coolify | 2 GB for Coolify, before your apps |
| Minecraft (Paper), a few friends | 2 to 3 GB for the server, plus the system |
Add them up, then leave a quarter spare. Linux uses spare memory as disk cache, which makes everything faster, so "spare" isn't wasted.
Databases deserve a special mention: they'll happily use as much memory as you let them, for caching. That's good when they have room and bad when they're fighting your app for it. Set their cache size on purpose rather than taking defaults written for a dedicated machine.
Measure a running server
The best estimate is a measurement. On a server that's been running your real workload for a few days:
free -hLook at the available column, not free. Linux fills free memory with cache and hands it back when a program needs it, so "free" always looks alarming. "Available" is what programs can actually still get.
To see what's using it, biggest first:
ps -eo rss,comm --sort=-rss | head -15The first column is resident memory in kilobytes. For Docker containers:
docker stats --no-streamSigns you need more
- Available in
free -his regularly under a tenth of the total. - Swap is always in use, and
vmstat 5shows numbers in thesiandsocolumns most of the time. That means the server is constantly moving memory to disk and back. - Processes are being killed. Check with:
journalctl -k | grep -i "out of memory"Any line there means the kernel had to kill something. Find out what and why before it happens again.
Signs you have too much
If available never drops below half the total, even at your busiest time, you could run on a smaller plan. Watch it for a full week first, so a weekly backup or a Monday rush doesn't catch you out.
Swap is a safety net, not more RAM
A swap file lets the kernel move rarely used memory to disk. On NVMe that's quick enough to survive a spike, which beats a killed database. But a server that swaps all the time is slow. If swap is always busy, you need more memory, not more swap.
Doing it on VPSNine
VPSNine plans come with 2 GB (Budget), 4 GB (Standard) or 8 GB (Extreme) of memory, fixed and yours on KVM, with NVMe storage underneath for swap. Choose a plan matches plans to typical workloads, and the plans page has the full specs.
Each one-click app lists the smallest plan it runs well on. n8n, Coolify and Minecraft start at Standard; most of the rest run on Budget. If you're between two sizes, take the smaller one and measure for a week.