Блог · 2026-08
Меньше 499 на Зарплате
5 августа 2026: AbortController для запросов ЗП, больше слотов gunicorn на WORK, request_time в nginx-логе для диагностики 499.
5 августа 2026: в access-логе часто мелькало 499 на /salary и /salary/employee/... — браузер обрывал запрос, не дождавшись ответа (уход со страницы или смена фильтра), пока gunicorn ещё считал.
Почему так
Promise.raceна 30 с не отменялfetch— «зомби»-запросы продолжали занимать threads.- При смене периода/фильтра стартовал новый запрос поверх старого.
- Socket.IO и staff-chat делят те же gunicorn gthread-слоты (было 3×4).
499 ≠ таймаут nginx (тот даёт 504). Расчёт ЗП на сервере при свободных слотах ~0.2 с.
Что сделали
AbortControllerна списке сотрудников, extras и карточке сотрудника; abort при новом запросе и наpagehide.- Gunicorn:
--max-requests/ jitter (recycle воркеров); на WORK рекомендуем 4×6 threads. - В nginx access-лог:
rt=/urt=(request_time/upstream_response_time) — видно быстрый abort vs долгое ожидание.
Что проверить
/salary— смена периода отменяет предыдущий Network-запрос (aborted).- Быстрый уход со страницы — нет «хвоста» extras.
- Карточка сотрудника — смена периода без наложения ответов.