This episode covers common NATS troubleshooting: slow consumers and backpressure, endless redelivery, full storage due to max_bytes, lost quorum, and subject collisions, complete with the diagnostic tools nats server check, stream report, consumer report, and debug logs.

No system runs without problems. Episode 19 arms you against the most common issues in NATS: slow consumers, endless redelivery, full storage, lost quorum, and subject collisions.
For each problem, we'll cover its symptoms, its causes, and how to put out the fire with the diagnostic tools you already know. Let's start with the most frequent problem.
A slow consumer occurs when a consumer can't keep up with the publisher's speed. Symptoms: nats consumer report shows pending climbing, and messages pile up in the stream.
nats consumer report ORDERS
nats server check consumernats consumer report ORDERS shows pending per consumer. nats server check consumer verifies the health of all consumers in one step.
Endless redelivery happens when a worker never manages to ack even though max_deliver isn't reached — usually because ack_wait is too short for long-running work, or the handler uses the wrong ack.
nats consumer report ORDERSnats consumer report ORDERS shows the Redeliveries column. A high and steadily rising number means messages keep failing to be processed.
ack_wait to match normal processing duration.msg.Ack() is called on the success path.max_deliver only if truly necessary, then route to the dead letter.nats consumer edit ORDERS WORKER --ack-wait 5m --max-deliver 5--ack-wait 5m gives the process more time. A practical rule: ack_wait must be larger than your worst reasonable processing time.
An unbounded stream will keep growing until it fills the disk. Symptoms: server crashes, publishing fails, and the log shows storage errors.
nats stream report
df -hnats stream report shows storage usage per stream; df -h checks the server's disk space. If the disk is nearly full, action must be taken immediately.
max_bytes on every stream.max_age for data that doesn't need to be kept long.nats stream edit ORDERS --max-bytes 10G --max-age 30d--max-bytes 10G --max-age 30d limits the stream to 10 GB or 30 days, whichever comes first. These two bounds prevent the disk from exploding.
Warning
When storage is full, JetStream rejects new publishes. Don't wait until a crash — monitor disk usage with alerting like the one built in episode 18, and set limits from the moment a stream is created.
Quorum loss happens when the number of healthy nodes is less than a majority. Symptoms: a replicas 3 stream shows declining health, publishes to the stream fail, and no leader is elected.
nats stream report
nats server check clusternats server check cluster verifies cluster health and quorum. If a cluster loses quorum, streams can't accept writes.
A subject collision occurs when two streams capture the same subject within one account. NATS rejects creating the second stream with the subject already covered by another stream error.
nats stream report
nats stream info ORDERSnats stream info ORDERS shows the list of captured subjects. Comparing subject lists across streams reveals overlaps.
orders.> and orders.* can collide.When something goes wrong, run the following steps in order:
nats server check
nats stream report
nats consumer report
nats server check pingnats server check ping checks server latency. Add debug logging when needed:
nats-server -DThe -D flag enables debug logging. Turn it on only during investigations, then turn it off — full debug logging in production degrades performance as discussed in episode 18.
Episode 19 trained you to put out fires: slow consumers addressed by adding workers and pull consumers, endless redelivery fixed through the right ack_wait, full storage prevented with max_bytes and max_age limits, quorum loss handled by keeping an odd node count, and subject collisions avoided with disciplined naming schemes.
Key takeaways:
nats server check and the two reports are your primary diagnostic weapons.In episode 20 next, we'll discuss the latest stable features in v2.14 — the release evolution from v2.10 to v2.12 then v2.14, upgrade and backward compatibility guidance, plus the 2026 features: high-throughput publishing, server-side message scheduling, sourcing and mirroring improvements, and the in_client and out_client metrics. Your knowledge will be updated to the latest release.