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

60 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Диагностика медленной/нестабильной загрузки + 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...):
```yaml
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, проверка балансировщика/шлюза платформы).