The only agent that thinks for itself

Autonomous Monitoring with self-learning AI built-in, operating independently across your entire stack.

Unlimited Metrics & Logs
Machine learning & MCP
5% CPU, 150MB RAM
3GB disk, >1 year retention
800+ integrations, zero config
Dashboards, alerts out of the box
> Discover Netdata Agents

Centralized metrics streaming and storage

Aggregate metrics from multiple agents into centralized Parent nodes for unified monitoring across your infrastructure.

Stream from unlimited agents
Long-term data retention
High availability clustering
Data replication & backup
Scalable architecture
Enterprise-grade security
> Learn about Parents

Fully managed cloud platform

Access your monitoring data from anywhere with our SaaS platform. No infrastructure to manage, automatic updates, and global availability.

Zero infrastructure management
99.9% uptime SLA
Global data centers
Automatic updates & patches
Enterprise SSO & RBAC
SOC2 & ISO certified
> Explore Netdata Cloud

Deploy Netdata Cloud in your infrastructure

Run the full Netdata Cloud platform on-premises for complete data sovereignty and compliance with your security policies.

Complete data sovereignty
Air-gapped deployment
Custom compliance controls
Private network integration
Dedicated support team
Kubernetes & Docker support
> Learn about Cloud On-Premises

Powerful, intuitive monitoring interface

Modern, responsive UI built for real-time troubleshooting with customizable dashboards and advanced visualization capabilities.

Real-time chart updates
Customizable dashboards
Dark & light themes
Advanced filtering & search
Responsive on all devices
Collaboration features
> Explore Netdata UI

Monitor on the go

Native iOS and Android apps bring full monitoring capabilities to your mobile device with real-time alerts and notifications.

iOS & Android apps
Push notifications
Touch-optimized interface
Offline data access
Biometric authentication
Widget support
> Download apps

The future of infrastructure observability

See our strategic direction across AI-native observability, full-stack signals, operational intelligence, and enterprise platform maturity.

AI-native observability
Full-stack signal coverage
Operational intelligence
Enterprise platform maturity
Agent releases every 6 weeks
Cloud continuous delivery
> Explore Product Roadmap

Best energy efficiency

True real-time per-second

100% automated zero config

Centralized observability

Multi-year retention

High availability built-in

Zero maintenance

Always up-to-date

Enterprise security

Complete data control

Air-gap ready

Compliance certified

Millisecond responsiveness

Infinite zoom & pan

Works on any device

Native performance

Instant alerts

Monitor anywhere

AI-native observability

Continuous delivery

Open source foundation

80% Faster Incident Resolution

AI-powered troubleshooting from detection, to root cause and blast radius identification, to reporting.

True Real-Time and Simple, even at Scale

Linearly and infinitely scalable full-stack observability, that can be deployed even mid-crisis.

90% Cost Reduction, Full Fidelity

Instead of centralizing the data, Netdata distributes the code, eliminating pipelines and complexity.

See and Map Your Entire Network

Live topology, flow analytics, and SNMP device and trap monitoring — unified with your full-stack observability.

Control Without Surrender

SOC 2 Type 2 certified with every metric kept on your infrastructure.

Integrations

800+ collectors and notification channels, auto-discovered and ready out of the box.

800+ data collectors
Auto-discovery & zero config
Cloud, infra, app protocols
Notifications out of the box
> Explore integrations
Real Results
46% Cost Reduction

Reduced monitoring costs by 46% while cutting staff overhead by 67%.

— Leonardo Antunez, Codyas

Zero Pipeline

No data shipping. No central storage costs. Query at the edge.

From Our Users
"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

No Query Language

Point-and-click troubleshooting. No PromQL, no LogQL, no learning curve.

Enterprise Ready
67% Less Staff, 46% Cost Cut

Enterprise efficiency without enterprise complexity—real ROI from day one.

— Leonardo Antunez, Codyas

SOC 2 Type 2 Certified

Zero data egress. Only metadata reaches the cloud. Your metrics stay on your infrastructure.

Full Coverage
800+ Collectors

Auto-discovered and configured. No manual setup required.

Any Notification Channel

Slack, PagerDuty, Teams, email, webhooks—all built-in.

Built for the People Who Get Paged

Because 3am alerts deserve instant answers, not hour-long hunts.

Every Industry Has Rules. We Master Them.

See how healthcare, finance, and government teams cut monitoring costs 90% while staying audit-ready.

Monitor Any Technology. Configure Nothing.

Install the agent. It already knows your stack.
From Our Users
"A Rare Unicorn"

Netdata gives more than you invest in it. A rare unicorn that obeys the Pareto rule.

— Eduard Porquet Mateu, TMB Barcelona

99% Downtime Reduction

Reduced website downtime by 99% and cloud bill by 30% using Netdata alerts.

— Falkland Islands Government

Real Savings
30% Cloud Cost Reduction

Optimized resource allocation based on Netdata alerts cut cloud spending by 30%.

— Falkland Islands Government

46% Cost Cut

Reduced monitoring staff by 67% while cutting operational costs by 46%.

— Codyas

Real Coverage
"Plugin for Everything"

Netdata has agent capacity or a plugin for everything, including Windows and Kubernetes.

— Eduard Porquet Mateu, TMB Barcelona

"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

Real Speed
Troubleshooting in 30 Seconds

From 2-3 minutes to 30 seconds—instant visibility into any node issue.

— Matthew Artist, Nodecraft

20% Downtime Reduction

20% less downtime and 40% budget optimization from out-of-the-box monitoring.

— Simon Beginn, LANCOM Systems

Pay per Node. Unlimited Everything Else.

One price per node. Unlimited metrics, logs, users, and retention. No per-GB surprises.

Free tier—forever
No metric limits or caps
Retention you control
Cancel anytime
> See pricing plans

What's Your Monitoring Really Costing You?

Most teams overpay by 40-60%. Let's find out why.

Expose hidden metric charges
Calculate tool consolidation
Customers report 30-67% savings
Results in under 60 seconds
> See what you're really paying

Your Infrastructure Is Unique. Let's Talk.

Because monitoring 10 nodes is different from monitoring 10,000.

On-prem & air-gapped deployment
Volume pricing & agreements
Architecture review for your scale
Compliance & security support
> Start a conversation

Monitoring That Sells Itself

Deploy in minutes. Impress clients in hours. Earn recurring revenue for years.

30-second live demos close deals
Zero config = zero support burden
Competitive margins & deal protection
Response in 48 hours
> Apply to partner

Per-Second Metrics at Homelab Prices

Same engine, same dashboards, same ML. Just priced for tinkerers.

Community: Free forever · 5 nodes · non-commercial
Homelab: $90/yr · unlimited nodes · fair usage
> Get the Homelab Plan

$1,000 Per Referral. Unlimited Referrals.

Your colleagues get 10% off. You get 10% commission. Everyone wins.

10% of subscriptions, up to $1,000 each
Track earnings inside Netdata Cloud
PayPal/Venmo payouts in 3-4 weeks
No caps, no complexity
> Get your referral link
Cost Proof
40% Budget Optimization

"Netdata's significant positive impact" — LANCOM Systems

Calculate Your Savings

Compare vs Datadog, Grafana, Dynatrace

Savings Proof
46% Cost Reduction

"Cut costs by 46%, staff by 67%" — Codyas

30% Cloud Bill Savings

"Reduced cloud bill by 30%" — Falkland Islands Gov

Enterprise Proof
"Better Than Combined Alternatives"

"Better observability with Netdata than combining other tools." — TMB Barcelona

Real Engineers, <24h Response

DPA, SLAs, on-prem, volume pricing

Why Partners Win
Demo Live Infrastructure

One command, 30 seconds, real data—no sandbox needed

Zero Tickets, High Margins

Auto-config + per-node pricing = predictable profit

Homelab Ready
Free Video Course

8-episode Netdata tutorial by LearnLinux.tv

76k+ GitHub Stars

3rd most starred monitoring project

Worth Recommending
Product That Delivers

Customers report 40-67% cost cuts, 99% downtime reduction

Zero Risk to Your Rep

Free tier lets them try before they buy

AI Support Assistant, Available 24/7

Nedi has access to all official documentation, source code, and resources. Ask any question about Netdata—responds in your language.

Deployment & configuration
Troubleshooting & sizing
Alerts & notifications
Evidence-based answers
> Ask Nedi now

Never Fight Fires Alone

Docs, community, and expert help—pick your path to resolution.

Learn.netdata.cloud docs
Discord, Forums, GitHub
Premium support available
> Get answers now

60 Seconds to First Dashboard

One command to install. Zero config. 850+ integrations documented.

Linux, Windows, K8s, Docker
Auto-discovers your stack
> Read our documentation

76,000+ Engineers Strong

615+ contributors. 1.5M daily downloads. One mission: simplify observability.

Per-Second. 90% Cheaper. Data Stays Home.

Side-by-side comparisons: costs, real-time granularity, and data sovereignty for every major tool.

See why teams switch from Datadog, Prometheus, Grafana, and more.

> Browse all comparisons
Edge-Native Observability, Born Open Source
Per-second visibility, ML on every metric, and data that never leaves your infrastructure.
Founded in 2016
615+ contributors worldwide
Remote-first, engineering-driven
Open source first
> Read our story
Promises We Publish—and Prove
12 principles backed by open code, independent validation, and measurable outcomes.
Open source, peer-reviewed
Zero config, instant value
Data sovereignty by design
Aligned pricing, no surprises
> See all 12 principles
Edge-Native, AI-Ready, 100% Open
76k+ stars. Full ML, AI, and automation—GPLv3+, not premium add-ons.
76,000+ GitHub stars
GPLv3+ licensed forever
ML on every metric, included
Zero vendor lock-in
> Explore our open source
Build Real-Time Observability for the World
Remote-first team shipping per-second monitoring with ML on every metric.
Remote-first, fully distributed
Open source (76k+ stars)
Challenging technical problems
Your code on millions of systems
> See open roles
Meet the Team Behind Netdata
Conferences, meetups, and tradeshows where you can see Netdata in action and talk to the engineers who build it.
Live demos and deep dives
Book 1-on-1 meetings
Talks and panel sessions
Event recaps and photos
> See all events
Talk to a Netdata Human in <24 Hours
Sales, partnerships, press, or professional services—real engineers, fast answers.
Discuss your observability needs
Pricing and volume discounts
Partnership opportunities
Media and press inquiries
> Book a conversation
Your Data. Your Rules.
On-prem data, cloud control plane, transparent terms.
Trust & Scale
76,000+ GitHub Stars

One of the most popular open-source monitoring projects

SOC 2 Type 2 Certified

Enterprise-grade security and compliance

Data Sovereignty

Your metrics stay on your infrastructure

Validated
University of Amsterdam

"Most energy-efficient monitoring solution" — ICSOC 2023, peer-reviewed

ADASTEC (Autonomous Driving)

"Doesn't miss alerts—mission-critical trust for safety software"

Community Stats
615+ Contributors

Global community improving monitoring for everyone

1.5M+ Downloads/Day

Trusted by teams worldwide

GPLv3+ Licensed

Free forever, fully open source agent

Why Join?
Remote-First

Work from anywhere, async-friendly culture

Impact at Scale

Your work helps millions of systems

$ guides / redis / redis-maxmemory-not-set

Operations Guides

Redis maxmemory not set: why every production instance needs a memory limit

A Redis instance with maxmemory set to 0 has no memory limit. On 64-bit builds, this is the default. Redis will keep allocating until the OS runs out of physical RAM, at which point the Linux OOM killer terminates the process. No warning, no graceful degradation, no eviction. The process simply vanishes.

What follows is a predictable restart cycle. Redis starts up, loads the last RDB snapshot (which may be stale or large enough to take minutes), and rejects all data commands during the loading phase. Applications see a cold cache with a 100% miss rate. They hammer the backing database to repopulate Redis. Clients reconnect in a thundering herd. If the dataset that caused the OOM is still being written, the instance hits the wall again and the cycle repeats.

This is the single most common production misconfiguration identified in the Redis operational playbook. Every production Redis instance must have maxmemory set, paired with the correct eviction policy, and sized to account for copy-on-write overhead during persistence.

What this means

maxmemory = 0 means Redis imposes no upper bound on its own memory use. The jemalloc allocator keeps requesting pages from the kernel until the system is exhausted. The kernel responds with the OOM killer, which scores processes by their memory footprint and terminates the highest-scoring one. Redis, typically the largest memory consumer, is the target.

The critical distinction operators miss: used_memory (what Redis tracks internally) and used_memory_rss (what the OS reports as resident set size) are not the same number. The OOM killer uses RSS, not used_memory. Fragmentation, jemalloc arena overhead, and copy-on-write (COW) during persistence forks all inflate RSS beyond what used_memory reports. An instance can have used_memory well under any limit you might imagine and still get OOM-killed because RSS exceeded available RAM.

During RDB snapshots and AOF rewrites, Redis forks a child process. With heavy write traffic, COW page duplication can push RSS to roughly 2x used_memory. This COW spike is not reflected in used_memory and is not counted against maxmemory. It is the most common cause of OOM kills in containerized Redis deployments.

flowchart TD
    A["maxmemory = 0"] --> B[Redis grows unbounded]
    B --> C{Persistence fork?}
    C -->|Yes| D[COW doubles RSS]
    C -->|No| E[Steady RSS growth]
    D --> F[OOM killer targets Redis]
    E --> F
    F --> G[Process killed]
    G --> H[Restart: load last RDB]
    H --> I[Cold cache + reconnect storm]
    I --> B

Common causes

CauseWhat it looks likeFirst thing to check
Default config untouchedCONFIG GET maxmemory returns 0; no memory limit ever enforcedredis-cli CONFIG GET maxmemory
maxmemory set equal to container limitPod OOM-killed before Redis reaches eviction; the limit matches the container memory cap exactlyCompare CONFIG GET maxmemory output to the container resources.limits.memory
CONFIG SET without CONFIG REWRITEChange was live but lost on restart; CONFIG GET maxmemory shows 0 after restartCheck the config file (often /etc/redis/redis.conf) for the maxmemory directive versus the running config
maxmemory-policy left at noevictionWrites fail with OOM command not allowed when used memory > 'maxmemory' instead of silent evictionCONFIG GET maxmemory-policy
Ignoring COW headroomInstance OOM-killed during BGSAVE or AOF rewrite despite used_memory being below maxmemoryCheck rdb_last_cow_size or aof_last_cow_size in INFO persistence

Quick checks

All commands below are read-only and safe to run on production instances:

# Check if maxmemory is set (0 means no limit)
redis-cli CONFIG GET maxmemory

# Check eviction policy
redis-cli CONFIG GET maxmemory-policy

# Current memory usage and fragmentation
redis-cli INFO memory | grep -E "used_memory:|used_memory_rss:|mem_fragmentation_ratio:"

# Check for OOM killer events in kernel log
dmesg -T | grep -i "out of memory\|oom-kill"

# Check if persistence is enabled (determines COW headroom needed)
redis-cli INFO persistence | grep -E "rdb_last_bgsave_status|aof_enabled"

# Check last COW size during fork operations
redis-cli INFO persistence | grep cow_size

# Check THP status (should be [never])
cat /sys/kernel/mm/transparent_hugepage/enabled

# Verify config file has the maxmemory directive
grep maxmemory /etc/redis/redis.conf

How to diagnose it

  1. Confirm maxmemory is set. Run CONFIG GET maxmemory. If the result is 0, the instance has no limit. This is the primary finding and the root cause of most unexplained Redis OOM kills.

  2. Check the eviction policy. Run CONFIG GET maxmemory-policy. The default is noeviction, which rejects writes with OOM errors instead of evicting keys. This is correct for data stores but wrong for caches.

  3. Compare maxmemory to system RAM. The recommended ceiling is roughly 75% of total system memory. For persistent instances (RDB or AOF enabled), the ceiling should be lower to accommodate COW. The playbook recommends keeping used_memory below 50% of physical RAM when persistence is enabled.

  4. Account for COW headroom. If persistence is enabled, the forked child process can temporarily double memory usage via copy-on-write. Check rdb_last_cow_size and aof_last_cow_size in INFO persistence. Values above 50% of used_memory indicate high OOM risk on the next fork.

  5. Check the container memory limit. In Kubernetes or Docker, the container limit must be at least 25% above maxmemory. If maxmemory is 4 GB, the container limit should be 5 GB or more. RSS can exceed used_memory due to fragmentation and COW, and the container runtime enforces the RSS limit, not Redis’s internal accounting.

  6. Look for OOM kills in kernel logs. Run dmesg -T | grep oom-kill. If redis-server appears in OOM kill records, the kernel terminated the process due to memory exhaustion.

  7. Verify THP is disabled. Transparent Huge Pages worsen COW behavior during fork. A single byte write to a 2 MB huge page copies the entire page. Check cat /sys/kernel/mm/transparent_hugepage/enabled and confirm it shows [never].

  8. Verify vm.overcommit_memory. Set to 1 for Redis to fork reliably. Without it, the kernel may refuse fork reservations, causing BGSAVE failures with fork: Cannot allocate memory. Check with sysctl vm.overcommit_memory.

Metrics and signals to monitor

SignalWhy it mattersWarning sign
used_memory / maxmemoryProximity to the configured limitRatio above 80% warrants investigation; above 90% is imminent eviction or rejection
used_memory_rssWhat the OOM killer actually seesApproaching total system RAM or container memory limit
mem_fragmentation_ratioRSS vs used_memory efficiencyAbove 1.5 sustained indicates fragmentation waste; below 0.8 with used_memory above 100 MB indicates swap
evicted_keys rateKeys being removed due to maxmemorySustained non-zero rate for cache workloads; any eviction for data store workloads
rdb_last_cow_size / aof_last_cow_sizeMemory consumed by COW during forkAbove 50% of used_memory indicates high OOM risk on the next fork
total_error_replies / errorstat_OOMWrite rejections under noevictionAny non-zero rate of OOM errors means writes are silently failing
maxmemory value itselfWhether a limit exists at all0 in production is a critical misconfiguration

Fixes

Set maxmemory correctly

Set maxmemory in bytes. For a cache-only instance on a system with 16 GB of physical RAM, the ceiling is roughly 12 GB (75% of total). For persistent instances, lower this to 8 GB (50% of total) to leave room for COW during fork.

# Set maxmemory to 8 GB for a persistent instance on a 16 GB system
redis-cli CONFIG SET maxmemory 8589934592

# Persist the change to the config file
redis-cli CONFIG REWRITE

CONFIG REWRITE modifies the redis configuration file on disk. This is necessary so the change survives restarts. Without it, CONFIG SET changes are lost when the process restarts.

If your deployment method (Redis Operator, Helm chart, Docker Compose) injects maxmemory via environment variables or ConfigMap templates, verify the value actually reaches the running process after deployment.

Choose the right eviction policy

The eviction policy determines what happens when maxmemory is reached. The default noeviction rejects writes with OOM errors.

PolicyUse caseBehavior at maxmemory
noeviction (default)Data store, primary databaseRejects writes with OOM error; reads continue
allkeys-lruPure cacheEvicts least recently used keys
allkeys-lfu (Redis 4.0+)Cache with skewed access patternsEvicts least frequently used keys
volatile-lruMixed cache and persistent dataEvicts only keys with TTLs set
volatile-ttlCache with expiry-based priorityEvicts keys with shortest remaining TTL first
allkeys-lrm (Redis 8.6+)Read-heavy cache, stale data evictionEvicts least recently modified keys

For cache workloads, allkeys-lru or allkeys-lfu converts a hard write failure into silent eviction, which is the desired behavior. For data store workloads, keep noeviction but ensure capacity planning prevents the limit from being reached.

# Set eviction policy for a cache workload
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Size for COW during persistence

If RDB or AOF persistence is enabled, the forked child process shares memory pages with the parent via copy-on-write. When the parent modifies a page, the kernel duplicates it for the child. Under heavy write load during fork, this can push RSS to approximately 2x used_memory.

The mem_not_counted_for_evict field in INFO memory shows the buffer memory excluded from eviction calculations. This prevents a feedback loop where evicting keys generates replication and AOF buffer writes that re-trigger eviction. However, these buffers still consume real RSS and count toward the OOM killer’s scoring.

Practical sizing rules from the playbook:

  • Cache-only instances (no persistence): maxmemory up to 75% of physical RAM. Leave 25% for bursts, fragmentation, and OS overhead.
  • Persistent instances (RDB or AOF enabled): used_memory should stay below 50% of physical RAM. This leaves headroom for COW during fork.
  • System RSS: used_memory_rss should stay below 75% of total physical RAM under all conditions.

Container and Kubernetes sizing

In containerized environments, the container memory limit must be higher than maxmemory. If maxmemory is 4 GB, set the container memory limit to 5 GB (25% above). This accounts for RSS overhead, fragmentation, and COW spikes during persistence.

The Kubernetes OOM killer acts on the pod’s cgroup memory limit, which includes RSS that Redis does not count toward maxmemory. Setting maxmemory equal to the container resource limit causes the pod to be OOM-killed before Redis itself triggers eviction. This is a well-documented issue with Redis Operators that inject maxmemory from ConfigMaps.

Kernel settings

Two kernel settings are essential for Redis with persistence:

  • vm.overcommit_memory = 1: Required for reliable fork() calls. Without it, the kernel may refuse fork reservations, causing BGSAVE to fail with fork: Cannot allocate memory. This setting is safe for Redis because COW means the child rarely needs the full reservation.

  • Disable Transparent Huge Pages: THP worsens COW behavior by 10-100x during fork. A single byte write to a 2 MB huge page copies the entire page. Disable it:

# Immediate effect (does not survive reboot)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# Persistent across reboots
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local

Replica considerations

Replicas do not proactively evict keys based on maxmemory. Eviction and expiration events are replicated from the primary, but the replica itself does not initiate eviction when its own memory is under pressure. A replica with no limit will still grow unbounded and be OOM-killed. Set maxmemory on replicas for monitoring purposes, but rely on container limits and system-level controls for actual memory protection on replicas.

Prevention

  • Set maxmemory on every production instance. This is non-negotiable. Without it, there is no protection against unbounded growth.
  • Persist the config. Run CONFIG REWRITE after every CONFIG SET maxmemory. Without it, the change is lost on restart.
  • Pair maxmemory with the right eviction policy. noeviction causes write failures when memory is full. For caches, use allkeys-lru or allkeys-lfu.
  • Size for COW. If persistence is enabled, keep maxmemory at or below 50% of physical RAM. COW during fork can temporarily double RSS.
  • Set container limits above maxmemory. The pod memory limit should be at least 25% above maxmemory.
  • Disable THP and set vm.overcommit_memory=1. These prevent fork failures and COW amplification.
  • Monitor used_memory_rss alongside used_memory. The OOM killer uses RSS, not logical memory. A stable used_memory with growing RSS signals fragmentation that will eventually trigger an OOM kill.
  • Watch mem_fragmentation_ratio. Sustained values above 1.5 indicate fragmentation waste. Enable activedefrag yes (Redis 4.0+, requires jemalloc) to reduce fragmentation automatically.

How Netdata helps

  • Per-second used_memory and used_memory_rss collection reveals the exact moment RSS diverges from logical usage, catching fragmentation and COW spikes that precede OOM kills.
  • maxmemory-aware memory ratio charts surface proximity to the configured limit. When maxmemory is 0, the ratio is undefined, which immediately flags the misconfiguration.
  • COW size tracking via rdb_last_cow_size and aof_last_cow_size correlates with RSS spikes during persistence forks, helping you size headroom correctly before the next fork triggers an OOM.
  • Eviction rate and OOM error detection from evicted_keys and errorstat_OOM distinguishes between healthy cache turnover and a memory pressure spiral where eviction, cache misses, and re-population writes all climb simultaneously.
  • ML-based anomaly detection on mem_fragmentation_ratio flags fragmentation drift before RSS silently grows past the OOM threshold, especially on instances where used_memory appears stable.

Netdata’s Redis monitoring with Netdata brings these signals together with per-second metrics and ML anomaly detection.

The Netdata solution

Redis monitoring with Netdata

Netdata monitors Redis with per-second metrics and ML anomaly detection. Track memory usage and fragmentation, fork/COW latency, replication backlog, evictions, and connection pressure to spot the failure modes in these runbooks early.