diff --git a/docker-compose.yml b/docker-compose.yml index 03780a73..8af86016 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,25 +79,25 @@ services: - gunicorn - --bind - 0.0.0.0:5001 -# Threaded workers, not the blocking sync default. An agent that fails -# the TLS handshake retries in a loop, and with 4 sync workers a handful -# of those pinned every worker: real UI requests queued 20+ seconds while -# the CPU sat idle. A stuck connection now holds one THREAD, and 32 -# (4 x 8) have to be exhausted before a person waits. -# -# Found in production at the other site (their commit db75ca7). Their -# server, our agent - so the same client behaviour will reach any site -# running the endpoint agent, and the fix belongs in the product rather -# than on one branch. -- --worker-class -- gthread -- --workers -- "4" -- --threads -- "8" -# 30, not 60: a hung connection frees its thread in half the time, which -# is what decides whether a retry storm is absorbed or queues. -- --timeout + # Threaded workers, not the blocking sync default. An agent that fails + # the TLS handshake retries in a loop, and with 4 sync workers a handful + # of those pinned every worker: real UI requests queued 20+ seconds while + # the CPU sat idle. A stuck connection now holds one THREAD, and 32 + # (4 x 8) have to be exhausted before a person waits. + # + # Found in production at the other site (their commit db75ca7). Their + # server, our agent - so the same client behaviour will reach any site + # running the endpoint agent, and the fix belongs in the product rather + # than on one branch. + - --worker-class + - gthread + - --workers + - "4" + - --threads + - "8" + # 30, not 60: a hung connection frees its thread in half the time, which + # is what decides whether a retry storm is absorbed or queues. + - --timeout - "30" - --access-logfile - "-"