Files
drhider/History/upload/2026-08-19-upload-delay.md
T

3.4 KiB
Raw Blame History

Диагностика медленной/нестабильной загрузки + v0.0.43 — 2026-08-19

Дата: 2026-08-19 Версия: 0.0.42 → 0.0.43


Проблема

Юзер: «Таймаут 30с» при загрузке 19 МБ PDF в drhider. Раньше (11с) грузилось.

Диагностика (факты)

Таймаут 30с

  • Введён 14.07.2026 (коммит b6dac6f, «не висеть бесконечно»), НЕ мой код.
  • 19 МБ / 30с = 0.63 МБ/с — при медленном/нестабильном канале не хватает.

Замеры загрузки с ВМ (внешний путь)

  • 1 МБ → 0.16с (быстро)
  • 5 МБ → 51.6с (медленно)
  • 10 МБ → 52.4с (медленно)
  • Повтор 10 МБ ×4: 1.07с / 52.3с / 52.3с / 52.3с — НЕСТАБИЛЬНО, чаще 52с.
  • Повтор 1 МБ: то 51с, то 0.5с — задержка НЕ зависит от размера.

Тайминг (10 МБ)

  • connect=0.046с, starttransfer=0.09с, total=52.5с.
  • Сервер отвечает быстро (starttransfer), но соединение «висит» ~52с после ответа.
  • Connection: close — НЕ помогает (то же 52с).

Сервер

  • Из loadtest: внутри кластера 10 МБ = 0.2с — сервер/Flask быстрые.
  • ClusterIP с ВМ недоступен (ВМ вне кластера) — проверить напрямую не вышло.

Применённые аннотации ingress (НЕ помогли)

Добавлены на ingress pythonk8s (ns 20a75175...):

nginx.ingress.kubernetes.io/proxy-request-buffering: "false"
nginx.ingress.kubernetes.io/client-body-buffer-size: "1024m"
  • kubectl patch — применено, nginx reload (75с).
  • В конфиге: client_body_buffer_size 1024m — применилось.
  • proxy_request_buffering on — НЕ применилось (аннотация не подхватилась shturval-контроллером).
  • Замер после: 5 МБ = 51.7с, 19 МБ = 53.8с — эффекта НЕТ.

Вывод

  • Задержка ~50с НЕ в коде drhider, НЕ в буферизации nginx, НЕ зависит от размера, НЕСТАБИЛЬНА (то 0.5с, то 52с). Вероятно: внешний путь шлюз/балансировщик/сеть (потеря пакетов / TCP RTO ~50с, или периодическая задержка шлюза).
  • Совпадает с диагнозом loadtest: «на iot-naeel шлюз держит ~50с».

Решение (v0.0.43) — защита от ошибки юзера

  • xhr.timeout: 30000 → 300000 (300с) — при нестабильной загрузке файл догрузится (медленно, но без «Таймаут 30с»).
  • Сообщение: «Таймаут 30с» → «Таймаут 300с».

Осталось

  • Аннотации на ingress оставлены (client-body-buffer-size 1024m не вредит; proxy-request-buffering не работает на shturval — искать правильный способ).
  • Корень задержки ~50с на внешнем пути — НЕ найден, требует сетевой диагностики (tcpdump, проверка балансировщика/шлюза платформы).