v0.8.0
sleep3r/mtproto.zigv0.8.0Apr 6, 2026by sleep3r
Upgrading?
AI Summary
This release focuses on proxy resilience and resource management. It introduces admission control with hysteresis, per-subnet rate limiting, and automatic RAM-based clamping of connection limits to fix issues with media loading and high CPU usage.
Key Highlights
- Admission control with hysteresis (90% cap, 80% resume) to eliminate spin loops.
- Handshake inflight budget capped at 30% of max connections.
- Per-/24 subnet rate limiting using zero-allocation token buckets.
- Auto-clamping of max_connections based on available RAM.
- Six new degradation metrics for monitoring proxy health.
New Features
- Admission control system
- Subnet rate limiting
- RAM-based connection clamping
- Degradation metrics
Full Release Notes
## [0.8.0](https://github.com/sleep3r/mtproto.zig/compare/v0.7.1...v0.8.0) (2026-04-06) ### 🇷🇺 Release notes (RU) **Проблемы, которые решает этот релиз** - При неоптимальных конфигурациях (завышенный `max_connections`, отсутствие rate-limit'а) могли не грузиться сториз и другие медиа — прокси уходил в перегрузку и не справлялся с relay-сессиями. - CPU мог очень жёстко утилизироваться из-за accept/close spin-loop'ов при насыщении пула соединений, особенно на 1 vCPU хостах. **Что добавлено и улучшено** - **Admission control с гистерезисом**: при достижении ≥90% от `max_connections` прокси приостанавливает приём новых соединений на `listen_fd` и возобновляет только при падении ниже 80%. Это убирает spin-loop'ы при перегрузке. - **Бюджет параллельных handshake'ов**: одновременные handshake'и ограничены до 30% от `max_connections`. Сканеры и DPI-пробы больше не вытесняют активные relay-сессии. - **Per-/24 subnet rate limiting**: zero-allocation token bucket ограничивает новые соединения с одной /24 (IPv4) или /48 (IPv6) подсети — по умолчанию до 8 conn/sec. Настраивается через `rate_limit_per_subnet`. - **Авто-клэмпинг `max_connections` по RAM**: при старте прокси автоматически ограничивает `max_connections` безопасным значением на основе доступной оперативной памяти. Можно отключить через `unsafe_override_limits = true`. - **Метрики деградации**: 6 новых счётчиков в периодическом логе статистики: - `cap` — достигнут `max_connections` - `sat` — отброшено из-за saturation override - `rate` — сработал subnet rate limit - `hs_budget` — превышен лимит параллельных handshake'ов - `hs_timeout` — таймаут handshake'а - `mp_fallback` — fallback с MiddleProxy на direct **Важно** - Если ранее у вас были проблемы с загрузкой сториз или высокой утилизацией CPU — обновление до 0.8.0 должно решить эти проблемы без ручного тюнинга конфигурации. - Авто-клэмпинг подберёт безопасные лимиты автоматически. Если вы уверены в своих значениях — используйте `unsafe_override_limits = true`. ### 🇬🇧 Release notes (EN) **Problems addressed in this release** - With non-optimal configurations (inflated `max_connections`, no rate limiting), stories and other media could fail to load — the proxy would become overloaded and unable to sustain relay sessions. - CPU could spike extremely hard due to accept/close spin loops when the connection pool was saturated, especially on 1 vCPU hosts. **What's new and improved** - **Admission control with hysteresis**: when active connections reach ≥90% of `max_connections`, the proxy pauses accepting new connections on `listen_fd` and resumes only when they drop below 80%. This eliminates spin loops under saturation. - **Handshake inflight budget**: concurrent handshakes are capped at 30% of `max_connections`. Scanner floods and DPI probes no longer evict active relay sessions. - **Per-/24 subnet rate limiting**: a zero-allocation token bucket limits new connections per /24 (IPv4) or /48 (IPv6) subnet — default: 8 conn/sec. Configurable via `rate_limit_per_subnet`. - **Auto-clamping `max_connections` by RAM**: at startup, the proxy automatically clamps `max_connections` to a RAM-safe estimate. Can be bypassed with `unsafe_override_limits = true`. - **Degradation metrics**: 6 new counters in the periodic stats log: - `cap` — reached `max_connections` - `sat` — dropped due to saturation override - `rate` — hit per-subnet rate limit - `hs_budget` — hit handshakes inflight limit - `hs_timeout` — handshake timeout reached - `mp_fallback` — MiddleProxy fallback to direct triggered **Important** - If you previously experienced issues with stories not loading or high CPU utilization — upgrading to 0.8.0 should resolve these problems without manual config tuning. - Auto-clamping will pick safe limits automatically. If you are confident in your values, use `unsafe_override_limits = true`. --- ## Recommended VPS presets (starting points) | Profile | `max_connections` | `idle_timeout_sec` | `handshake_timeout_sec` | `rate_limit_per_subnet` | Notes | |---|---:|---:|---:|---:|---| | 1 vCPU / 1 GB | 512 | 120 | 15 | 8 | Auto-clamped by default | | 2 vCPU / 2 GB | 1024 | 120 | 15 | 8 | Good for mixed traffic | | 4 vCPU / 4 GB | 1536–2048 | 120 | 15 | 8 | Raise gradually and monitor | | 8 vCPU / 8 GB | 2048–3072 (per instance) | 120 | 15 | 8 | Prefer 2+ instances | ### Tuning guidance / Рекомендации по тюнингу - Start from the profile above, then increase `max_connections` in +15–25% steps. - Monitor: `conn stats`, reconnect/error rate, and sustained CPU. - If stories or media fail under load — your `max_connections` is likely too high for the host; let auto-clamp handle it or reduce manually. - If new clients intermittently fail under churn, reduce `max_connections` by ~20%. --- ### Features * implement proxy resilience optimizations ([#81](https://github.com/sleep3r/mtproto.zig/issues/81)) ([71fb157](https://github.com/sleep3r/mtproto.zig/commit/71fb1577c26d4f53dd8ee34f5151481947141b19)) --- This PR is managed by Release Please.
Related Repositories
lightpanda-io/browser★ 36,859
Lightpanda: the headless browser designed for AI and automation
tigerbeetle/tigerbeetle★ 17,229
The financial transactions database designed for mission critical safety and performance.
nullclaw/nullclaw★ 8,131
Fastest, smallest, and fully autonomous AI assistant infrastructure written in Zig
zml/zml★ 4,195
Any model. Any hardware. Zero compromise. Built with @ziglang / @openxla / MLIR / @bazelbuild
dmtrKovalenko/odiff★ 3,280
A very fast SIMD-first image comparison library (with nodejs API)