When your log buffer is a black hole for high-frequency events
By Saket Jain Published Linux/Unix
When your log buffer is a black hole for high-frequency events
Technical Briefing | 11/14/2026
We have all been there. You are tracking down a race condition that happens once every ten thousand requests, and you bump up the log level to debug. Suddenly, your application grinds to a halt because it is spending more time writing to standard output than actually doing work. You check the system logs, but journald has already throttled the input rate, silently dropping the very events you needed to capture.
Why journald rate-limiting is killing your debugging
By default, systemd journals put a hard cap on how many lines a process can throw at it per second. It is a reasonable safeguard against a runaway logging loop filling up the disk, but it is a disaster for performance-sensitive tracing. When you exceed these limits, the kernel socket buffers fill, the application blocks on write calls, and your latency metrics go through the roof. Most of the time, the application does not even tell you the log message never made it to disk.
bpftrace -e 'tracepoint:syscalls:sys_enter_write /pid == 1234/ { @[ustack] = count(); }'
- Use RateLimitBurst and RateLimitIntervalSec in journald.conf to loosen the leash if you must
- Move ephemeral debug logs to a memory-backed file descriptor that does not hit the journal daemon
- Instrument the hot path with eBPF to count calls instead of printing them out to syslog
If you are still piping logs into the journal just to watch them expire, you are fighting the wrong tool. EBPF allows you to hook directly into the function call or tracepoint without context switching to the logging daemon. Next time your application starts stalling during a debug session, stop adding more log lines and start counting them in the kernel instead.
