Skip to content

[tuning]

Performance and concurrency tuning for webhook processing, static map tiles, geocoding, rendering, delivery and the validation hook.

Warning

Do not change these settings without talking to us in Discord first. Bad values can cause queue starvation, rate-limit lockouts, or memory blowups. The defaults are reasonable for most installs.

Processing

Field Type Default Description
reload_interval_secs int 60 How often tracking rules, humans and profiles are reloaded from the database. Also how often the [Status] log line is written.
worker_pool_size int 4 Max webhooks processed concurrently.
render_pool_size int 8 Concurrent DTS render goroutines.
render_queue_size int 100 Max buffered render jobs before backpressure.

Tileserver

Tiles are generated asynchronously: webhook handlers submit tile requests to a queue, dedicated workers POST them to the tileserver, and payloads wait until the tile is ready or the deadline passes (then the fallback image is used). A slow tileserver can't block webhook processing.

Field Type Default Description
tileserver_concurrency int 2 Tile worker goroutines (parallel POSTs to the tileserver).
tileserver_timeout int 10000 HTTP timeout per tile POST (ms).
tileserver_queue_size int 100 Max pending tile requests. Overflow uses the fallback URL.
tileserver_deadline int 10000 Max time (ms) a payload waits for its tile before falling back.
tileserver_failure_threshold int 5 Consecutive failures before the tileserver circuit breaker opens.
tileserver_cooldown_ms int 30000 How long the breaker stays open before retrying.
tileserver_pregen_ttl int 86400 TTL (seconds) requested for pregenerated tiles. -1 = send no TTL. Can be overridden per map type with tileserver_settings.<type>.ttl.

Geocoding

Used by both the reverse geocoder ([geocoding] provider) and GeoNames intersection lookups ([geocoding] intersection_users). Each has its own limiter and circuit breaker sized from these values, so total outbound geo traffic can peak at twice geocoding_concurrency.

Field Type Default Description
geocoding_concurrency int 5 Max concurrent outbound requests per geocoding service.
geocoding_timeout int 5000 HTTP timeout per request (ms).
geocoding_failure_threshold int 5 Consecutive failures before the circuit breaker opens.
geocoding_cooldown_ms int 30000 How long the breaker stays open before retrying (ms).

0 (or leaving the key out) uses the default.

Delivery

Field Type Default Description
delivery_queue_size int 200 Buffer size of each destination's delivery queue (one queue per user, channel or webhook with pending messages). Memory use grows with the number of active destinations. Idle queues are removed after 60 seconds. When a queue is full, the oldest queued alert is dropped (rate-limit and ban notices are never dropped).
concurrent_discord_destinations int 10 Concurrent Discord DM/channel sends.
concurrent_telegram_destinations int 10 Concurrent Telegram sends.
concurrent_discord_webhooks int 10 Concurrent Discord webhook sends.

For outbound delivery, lower concurrency reduces the chance of hitting global rate limits. See Rate limits.

Validation hook

Used only when [validation] url is set.

Field Type Default Description
validation_timeout_ms int 1500 Per-call HTTP timeout (ms).
validation_max_concurrent int 16 Max parallel validator calls per webhook event.

Unused keys

encounter_cache_ttl, batch_size and flush_interval_millis are still accepted, but PoracleNG doesn't use them (they are no longer in the 5.3 config.example.toml). max_database_connections, concurrent_matched_processors and matched_max_queue_size were removed with the old alerter and are ignored. All of these can be deleted from your config.