How Much RAM Does Your Headless CMS Actually Need?

Real memory benchmarks for Strapi, Payload, Directus, and ElmapiCMS. Find out the actual RAM requirements before you pick a server and regret it.

R
Raşit Apalak
7 min read

Because "2GB minimum" doesn't tell the whole story

You're setting up a headless CMS. The documentation says "2GB RAM minimum." You spin up a $10/month VPS with 2GB, deploy your CMS, and... it crashes under modest load. Or it runs so slowly that your API responses take 3 seconds.

Welcome to the RAM guessing game.

This guide shares real-world memory usage data for popular headless CMS options. No marketing numbers. Just actual consumption you can expect in production.


Table of Contents


Why RAM Matters for CMS Performance

Memory is the silent bottleneck nobody talks about until it's too late.

The Node.js Factor

Strapi, Payload, and Directus run on Node.js. Node is excellent for I/O-heavy applications, but it has a reputation for memory consumption. A "simple" Node.js app can easily use 200-500MB just sitting idle.

Add a CMS with database connections, caching, plugins, and media processing, and you're looking at 500MB-2GB+ before any traffic hits.

The PHP Factor

PHP-based CMS solutions (like ElmapiCMS on Laravel) handle memory differently. PHP processes are short-lived by default. They spin up, handle a request, and release memory. This makes memory consumption more predictable and generally lower.

What Happens When You Run Out

When your VPS runs out of RAM:

  1. Swap kicks in - Your SSD becomes fake RAM. API responses go from 50ms to 500ms.
  2. OOM killer - Linux starts killing processes. Your CMS dies randomly.
  3. Complete freeze - Nothing responds. You restart and hope for the best.

None of these are acceptable for a production API.


Testing Methodology

To get fair comparisons, I tested each CMS under identical conditions:

Hardware: 4 vCPU, 4GB RAM, SSD storage Database: PostgreSQL 15 Content: 1,000 entries across 5 collections Traffic: 100 concurrent users requesting random entries Duration: 30-minute load test

Measurements taken:

  • Idle memory (CMS running, no traffic)
  • Active memory (under load)
  • Peak memory (maximum observed)
  • Response times (p50, p95, p99)

Let's see the results.


Strapi Memory Usage

Strapi is the most popular open-source headless CMS. It's also one of the hungriest.

Idle Memory

Fresh Strapi v5 installation with no plugins:

  • Node.js process: 380-450MB
  • Total system: ~600MB including PostgreSQL

With common plugins (i18n, GraphQL, Users & Permissions):

  • Node.js process: 520-680MB
  • Total system: ~850MB

Under Load

With 100 concurrent users:

  • Memory usage: 800MB - 1.2GB
  • Peak observed: 1.4GB

Response Times

MetricTime
p50 (median)85ms
p95180ms
p99450ms

Minimum Viable Server

For a small production Strapi site:

  • Minimum: 2GB RAM (will hit swap)
  • Recommended: 4GB RAM
  • Comfortable: 8GB RAM

Cost Estimate

A 4GB Droplet on DigitalOcean: $24/month

With database included (managed PostgreSQL): $39/month+


Payload CMS Memory Usage

Payload is TypeScript-native and known for being more resource-efficient than Strapi.

Idle Memory

Fresh Payload installation:

  • Node.js process: 180-250MB
  • Total system: ~450MB including PostgreSQL

With typical collections and fields:

  • Node.js process: 280-350MB
  • Total system: ~550MB

Under Load

With 100 concurrent users:

  • Memory usage: 450-650MB
  • Peak observed: 780MB

Response Times

MetricTime
p50 (median)45ms
p9595ms
p99180ms

Minimum Viable Server

For a small production Payload site:

  • Minimum: 1GB RAM (tight but works)
  • Recommended: 2GB RAM
  • Comfortable: 4GB RAM

Cost Estimate

A 2GB Droplet on DigitalOcean: $12/month


Directus Memory Usage

Directus wraps around your database and provides an API layer. Memory usage depends heavily on the database size.

Idle Memory

Fresh Directus installation:

  • Node.js process: 200-300MB
  • Total system: ~500MB including PostgreSQL

With 5 collections and standard extensions:

  • Node.js process: 350-450MB
  • Total system: ~650MB

Under Load

With 100 concurrent users:

  • Memory usage: 500-750MB
  • Peak observed: 920MB

Response Times

MetricTime
p50 (median)65ms
p95140ms
p99280ms

Minimum Viable Server

For a small production Directus site:

  • Minimum: 2GB RAM
  • Recommended: 4GB RAM
  • Comfortable: 4-8GB RAM

Cost Estimate

A 4GB Droplet on DigitalOcean: $24/month


ElmapiCMS Memory Usage

ElmapiCMS runs on Laravel (PHP). PHP-FPM handles requests with separate processes that release memory after each request.

Idle Memory

Fresh ElmapiCMS installation:

  • PHP-FPM processes: 80-120MB (with 4 workers)
  • Total system: ~300MB including PostgreSQL

With 5 projects and multiple collections:

  • PHP-FPM processes: 100-150MB
  • Total system: ~350MB

Under Load

With 100 concurrent users:

  • Memory usage: 200-350MB
  • Peak observed: 420MB

Response Times

MetricTime
p50 (median)35ms
p9575ms
p99140ms

Minimum Viable Server

For a small production ElmapiCMS site:

  • Minimum: 1GB RAM (comfortable)
  • Recommended: 2GB RAM
  • Comfortable: 2-4GB RAM

Cost Estimate

A 1GB Droplet on DigitalOcean: $6/month


Comparison Summary

Here's the side-by-side comparison:

CMSIdle RAMUnder LoadPeakMin ServerMonthly Cost
Strapi600MB800-1200MB1.4GB4GB$24+
Payload450MB450-650MB780MB2GB$12+
Directus500MB500-750MB920MB2-4GB$18+
ElmapiCMS300MB200-350MB420MB1GB$6+

Memory Efficiency Ranking

  1. ElmapiCMS - PHP's request-based model wins here
  2. Payload - Lean TypeScript architecture pays off
  3. Directus - Reasonable, depends on usage patterns
  4. Strapi - Most memory-hungry by a significant margin

Response Time Ranking (p95)

  1. ElmapiCMS - 75ms
  2. Payload - 95ms
  3. Directus - 140ms
  4. Strapi - 180ms

What Server Should You Get

Based on the data, here's what I recommend:

Hobby/Side Project

Just testing or running a personal site?

  • ElmapiCMS: $6/month (1GB Droplet)
  • Payload: $12/month (2GB Droplet)
  • Directus: $12/month (2GB Droplet)
  • Strapi: $24/month (4GB Droplet)

Small Business / Production Site

Moderate traffic, needs to be reliable:

  • ElmapiCMS: $12/month (2GB Droplet)
  • Payload: $24/month (4GB Droplet)
  • Directus: $24/month (4GB Droplet)
  • Strapi: $48/month (8GB Droplet or managed service)

Agency Managing Multiple Clients

This is where ElmapiCMS's multi-project feature changes the math:

With separate installations (Strapi):

  • 10 clients × $24/month = $240/month

With ElmapiCMS multi-project:

  • 1 installation × $12/month = $12/month

Annual savings: $2,736


Memory Optimization Tips

For Node.js CMS (Strapi, Payload, Directus)

1. Tune Node.js memory limits:

node --max-old-space-size=1024 app.js

2. Use a process manager:

pm2 start app.js --max-memory-restart 1G

3. Enable Redis for caching: Moves session and cache data out of Node.js memory.

4. Disable unused plugins: Every plugin adds memory overhead.

5. Use GraphQL sparingly: GraphQL adds significant memory overhead compared to REST.

For PHP CMS (ElmapiCMS)

1. Tune PHP-FPM:

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 4

2. Enable OPcache:

opcache.enable=1
opcache.memory_consumption=128

3. Use Redis for sessions and cache:

CACHE_DRIVER=redis
SESSION_DRIVER=redis

General Tips

1. Optimize your database:

  • Add indexes for frequently queried fields
  • Use database connection pooling
  • Consider a managed database service

2. Use a CDN for media: Serve images from Cloudflare/S3/etc., not your CMS server.

3. Implement API caching: Cache API responses at the edge or in your frontend.

4. Monitor continuously: Use tools like htop, Grafana, or Datadog to spot memory issues early.


Conclusion

RAM requirements vary significantly between headless CMS options. Choosing the right one can mean the difference between a $6/month server and a $48/month server. Over a year, that's $504 in savings.

The data is clear:

  • Strapi is feature-rich but memory-hungry. Budget for 4GB+ in production.
  • Payload is leaner and faster. 2GB works well for most projects.
  • Directus is middle-of-the-road. 2-4GB depending on usage.
  • ElmapiCMS is the most memory-efficient. 1GB handles real traffic.

If you're cost-conscious or managing multiple projects, ElmapiCMS offers the best resource efficiency. Its PHP architecture and multi-project support mean you can run 10+ client sites on a single 2GB server without breaking a sweat.

Want to test it yourself? Try the ElmapiCMS demo or get it for $149.


Related Posts:

Share this post:

Related posts