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 / activemq / activemq-temporary-destination-leak ▌

Operations Guides

ActiveMQ temporary destination leak: request-reply queues that never close

You open the broker’s JMX view and the TemporaryQueues attribute lists hundreds or thousands of entries. The count only goes up. Nothing in the application logs looks wrong, request-reply calls mostly work, but the destination count climbs with traffic and never comes back down. That is a temporary destination leak.

Temporary destinations back the classic JMS request-reply pattern: a client creates a TemporaryQueue, sends a request with the temp queue as the reply-to, and waits for the response. In a healthy system these destinations cycle constantly: created, used, deleted. When the count grows monotonically with request volume, something in that lifecycle is broken, and the broker is accumulating MBeans, metadata, and advisory traffic for destinations that will never be used again.

The leak is slow. It will not take the broker down today. But every leaked temp destination creates JMX MBeans and consumes heap, and left alone it feeds the destination-explosion failure pattern: growing heap, increasing GC frequency, sluggish JMX, and eventually an OOM or GC death spiral. It also interacts badly with Network of Brokers topologies, where leaked temp destinations generate advisory churn across bridges.

What this means

A temporary destination in ActiveMQ Classic is scoped to the JMS Connection that created it. Only that connection can consume from it, and critically, it is only auto-deleted when the creating connection closes. There is no idle timeout, no TTL, no broker-side garbage collection of temp destinations while their connection lives.

This single rule explains almost every leak you will see:

flowchart TD
  A[Client creates TemporaryQueue] --> B[Sends request, waits for reply]
  B --> C{Cleanup path}
  C -->|tempQueue.delete or connection.close| D[Destination removed from broker]
  C -->|connection pooled and returned| E[Temp destination stays registered]
  C -->|consumer dies before reply arrives| E
  C -->|delete never called| E
  E --> F[Monotonic growth in TemporaryQueues count]
  F --> G[MBean and heap growth, advisory churn]

So the diagnostic question is never “why doesn’t the broker clean these up”. The broker is behaving exactly as specified. The question is: which client connections are staying open while their temp destinations accumulate?

Common causes

CauseWhat it looks likeFirst thing to check
Connection pooling holds creating connections openTemp count grows steadily with request volume; connections rarely closeIs the client using PooledConnectionFactory or a JCA pool?
Client never calls TemporaryQueue.delete()Growth proportional to request-reply calls; one temp queue per requestRead the request-reply code path: is there a per-request createTemporaryQueue with no matching delete?
Reply consumer dies before consuming the responseLeaked destinations correlate with client errors or timeoutsClient-side logs for timeouts, exceptions, or threads killed mid-request
Per-request temp queue antipatternHuge churn: creation rate equals request rateRecommended pattern is one temp queue per client, reused, with JMSCorrelationID matching
Network of Brokers interaction“Temp destination does not exist” errors on remote brokers after reconnection; temp-related subscriptions lingering on bridgesBridge logs and remote broker errors after network blips

The first two causes dominate. Connection pooling is the subtle one: the pool keeps the underlying JMS Connection alive between logical borrows, so the broker-side rule “delete temp destinations when the connection closes” never fires. From the broker’s perspective the connection lives for days, and every temp destination it ever created stays registered.

Quick checks

All read-only. Run against the web console’s Jolokia endpoint (default port 8161) or any JMX client.

# Count active temporary queues
curl -s -u admin:admin \
  'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/TemporaryQueues' \
  | python3 -c "import json,sys; print(len(json.load(sys.stdin)['value']))"

# Count active temporary topics
curl -s -u admin:admin \
  'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/TemporaryTopics' \
  | python3 -c "import json,sys; print(len(json.load(sys.stdin)['value']))"

Per-temp-destination MBeans are registered like regular destinations, with destinationType=TempQueue or destinationType=TempTopic (see ActiveMQDestination.getDestinationTypeAsString() in the command classes); the Broker MBean’s TemporaryQueues/TemporaryTopics attributes return their ObjectNames.

# Watch the growth rate: sample twice, 5 minutes apart
for i in 1 2; do
  curl -s -u admin:admin \
    'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/TemporaryQueues' \
    | python3 -c "import json,sys; print(len(json.load(sys.stdin)['value']))"
  sleep 300
done

# Compare with connection count: leak with stable connections points at pooling
curl -s -u admin:admin \
  'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/CurrentConnectionsCount'

# Total destination count: temp leaks feed destination explosion
curl -s -u admin:admin \
  'http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues' \
  | python3 -c "import json,sys; print(len(json.load(sys.stdin)['value']))"

# JVM heap: is the leak already pressuring the broker?
curl -s -u admin:admin \
  'http://localhost:8161/api/jolokia/read/java.lang:type=Memory/HeapMemoryUsage'

Interpretation of the two-sample check: a healthy request-reply system oscillates. The count goes up during bursts and back down as requests complete and connections cycle. A count that ratchets upward and never returns to baseline is a leak, regardless of the absolute number.

How to diagnose it

  1. Confirm the growth pattern. Sample TemporaryQueues and TemporaryTopics over at least 15 to 30 minutes, alongside application request volume. If temp count tracks request count with no decay, you have a leak, not a burst.

  2. Correlate with connection count. Pull CurrentConnectionsCount over the same window. If connections are stable but temp destinations grow, long-lived connections are accumulating temp destinations: connection pooling or a long-lived client creating per-request temp queues. If connections also grow, you may have a connection leak as well; see ActiveMQ connection and session leak: clients that never close.

  3. Identify the owning clients. Temp destinations are created by specific connections. Enumerate connection MBeans and their client IDs and remote addresses to find which application hosts are responsible. Thread names in a broker thread dump also carry client IPs if you need to go deeper.

  4. Read the client code path. Look for the request-reply implementation. Red flags: createTemporaryQueue() inside a per-request method with no delete() in a finally block; a PooledConnectionFactory wrapping the connection that creates temp destinations; a reply consumer created per request that can be abandoned on timeout. The supported pattern is one temp queue per client created at startup, reused for all requests, with responses matched by JMSCorrelationID.

  5. Check for NoB involvement. In a Network of Brokers, temp destinations interact poorly with bridges. Look for “temp destination does not exist” errors on remote brokers after bridge reconnection, and for temp-destination advisory traffic flooding the network. Undeleted temp queues generate advisory messages on ActiveMQ.Advisory.TempQueue for every creation and deletion event, and in broker networks this advisory churn can consume significant broker memory on its own.

  6. Rule out client-side advisory staleness. If clients report InvalidDestinationException: Cannot publish to a deleted Destination for temp queues that should exist (a class of issues tracked upstream as AMQ-5250, closed as cannot-reproduce), the client’s advisory-based destination tracking may be stale. Setting jms.watchTopicAdvisories=false on the connection factory URL makes the client ask the broker whether a temp destination exists instead of trusting cached advisory state. This is also required if you disabled advisories on the broker.

Metrics and signals to monitor

SignalWhy it mattersWarning sign
TemporaryQueues / TemporaryTopics count (Broker MBean)The leak itself, directly measuredGreater than 100, or any sustained monotonic growth
Rate of change of temp destination countDistinguishes burst from leakPositive slope over hours that never returns to baseline
CurrentConnectionsCountSeparates pooled-connection leaks from connection leaksStable connections + growing temp count = pooling or missing delete()
Total destination countTemp leaks feed destination explosion and MBean growthCount climbing without corresponding application scaling
JVM heap after major GCEach destination creates at least 4 MBeans and consumes heapUpward trend after GC correlating with destination growth
GC pause duration and frequencyDestination explosion ends in GC pressureIncreasing pause frequency as destination count grows
Advisory topic activity (ActiveMQ.Advisory.TempQueue)Temp churn generates advisory traffic; in NoB it can flood bridgesAdvisory destinations consuming meaningful memory or message volume

Fixes

Fix the client lifecycle

The durable fix is in the client. Every createTemporaryQueue() must have a matching TemporaryQueue.delete(), ideally in a finally block so timeouts and exceptions do not skip it. Better still, stop creating temp destinations per request: create one TemporaryQueue per client at startup, reuse it for the life of the client, and correlate responses with JMSCorrelationID. This eliminates the churn entirely and is the pattern ActiveMQ’s own request-response documentation recommends. Tradeoff: correlation-id matching adds a small amount of client complexity, and a shared reply queue needs care if multiple threads consume from it.

Constrain connection pooling

If a PooledConnectionFactory or JCA pool holds connections open for days, temp destinations created on those connections live for days. Options, in increasing order of disruption: call delete() explicitly after each request so pooled connections stay clean; cap the lifetime or reuse count of pooled connections so they eventually close and take their temp destinations with them; or segregate request-reply traffic onto its own non-pooled, short-lived connections. The tradeoff is connection establishment cost, which is exactly what the pool was there to avoid.

Handle the dying reply consumer

When a reply consumer times out or its thread is killed before the response arrives, the temp destination is orphaned until the connection closes. Make sure timeout paths also run cleanup: close the consumer and delete the temp destination on the error path, not just the happy path. If the creating connection is pooled, the delete() call is mandatory here because the connection will not close.

Broker-side mitigation and cleanup

There is no broker-side auto-cleanup for temp destinations while their connection lives; gcInactiveDestinations and destination purge policies apply to regular destinations, and no policy reaps temp destinations on a live connection (temp destinations are removed only when the creating connection closes or the client deletes them). The broker-side lever is operational: identify the offending connections via JMX and close them, which triggers the auto-delete. This drops the owning client’s sessions and in-flight work, so treat it as disruptive and coordinate with the application team before doing it. You can also reduce the blast radius by disabling advisory support on destinations that do not need it (clients must then set jms.watchTopicAdvisories=false), which cuts the advisory MBean overhead per leaked destination.

Version note

On ActiveMQ Classic 5.19.8 / 6.2.7 and later, temp destination isolation was tightened: only the creating connection can consume from a temp destination, and the previous permissive behavior is now gated behind the destination-policy attribute allowTempDestinationStealing, which the fix added and which defaults to false (CVE-2026-54475, a temp-destination ownership takeover vulnerability affecting versions before 5.19.8 and 6.0.0 through 6.2.6). If you run failover or network-bridging setups that relied on a different connection consuming replies from a temp destination, those patterns break on upgrade, and you should treat that as a design problem to fix rather than a flag to re-enable permanently.

Prevention

  • Adopt the reuse pattern as a standard. One temp destination per client, JMSCorrelationID matching, delete on shutdown. Per-request temp queue creation should fail code review.
  • Alert on the count, not the incident. Page nothing here; ticket when TemporaryQueues or TemporaryTopics exceeds 100 or shows sustained growth. This is a slow leak and you want to catch it at hundreds, not at tens of thousands when GC starts to suffer.
  • Track the trend, not just the threshold. A baseline of 40 temp destinations that climbs 10 per day will cross any static threshold eventually, and the slope tells you the leak rate before the absolute number matters.
  • Watch downstream pressure signals. Total destination count, JVM heap after GC, and GC pause frequency tell you whether the leak is still cosmetic or is starting to degrade the broker.
  • Test the failure paths. Timeout, exception, and deployment-restart paths are where reply consumers die and cleanup gets skipped. Exercise them deliberately.

How Netdata helps

  • Netdata’s ActiveMQ collector pulls the Broker MBean via JMX, including the TemporaryQueues and TemporaryTopics attributes, so temp destination count is charted continuously rather than sampled by hand during an incident.
  • Plotting temp destination count next to CurrentConnectionsCount on one dashboard makes the pooling-versus-connection-leak distinction immediate: stable connections with rising temp destinations is the pooling signature.
  • Correlating temp destination growth with total destination count, JVM heap, and GC pause metrics shows whether the leak is still contained or is feeding the destination-explosion pattern, without switching tools.
  • Per-second collection catches the oscillation-versus-ratchet difference in the temp count during traffic bursts, which coarse 5-minute polling tends to hide.
  • Alerts on sustained growth (not just absolute threshold) surface the leak at ticket severity days before it becomes a heap or GC problem.