# DogStatsD metrics dropping under load
What you see: custom metrics are fine at low traffic and spotty or gappy at peak. No errors anywhere, because UDP does not do errors.
## Why
DogStatsD is UDP. When the app emits faster than the agent drains the socket buffer, the kernel drops packets silently. Common amplifiers:
- Bursty emission (10k increments in a loop, then nothing).
- Many containers sharing one agent with small buffers.
- Histograms with high cardinality: more series, more packets.
## Diagnose
The agent exposes its own DogStatsD telemetry: packets received vs dropped. If drops climb with load, it is the buffer. Also check the app side: emitting synchronously in the request path makes the app pay for every packet.
## Fix
1. **Raise the socket buffer** (`SO_RCVBUF`) on the agent host if the OS default is small. This is the usual fix.
2. **Sample client-side.** DogStatsD supports sample rates; a 0.1 rate on a high-volume counter keeps the shape and drops 90 percent of packets.
3. **Aggregate more, emit less.** Counters and distributions exist so you do not emit a gauge per event.
4. **Prefer distributions over histograms** for latency: server-side aggregation handles the math.
5. If loss is unacceptable for a specific metric, send it via the API instead of UDP. Slower, reliable, and rate-limited, pick your tradeoff.
## Trap
Assuming gaps mean Datadog is down. Check the agent-local drops first; it is almost always the buffer.