From 160f6d680a687b752bb0abee0308e7c60e9a565a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 21 Aug 2026 15:16:17 +0300 Subject: [PATCH] =?UTF-8?q?History:=20=D1=81=D1=82=D1=80=D0=B5=D1=81=D1=81?= =?UTF-8?q?-=D1=82=D0=B5=D1=81=D1=82=20egress=20=E2=80=94=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=20=D0=B4=D0=BE=2050?= =?UTF-8?q?=D0=9C=D0=91,=20OOM=20=D0=BD=D0=B0=20100=D0=9C=D0=91=20(=D0=BA?= =?UTF-8?q?=D0=B2=D0=BE=D1=82=D0=B0=20200=D0=9C=D0=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/2026-08-21-stress-test-egress.md | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 History/2026-08-21-stress-test-egress.md diff --git a/History/2026-08-21-stress-test-egress.md b/History/2026-08-21-stress-test-egress.md new file mode 100644 index 0000000..e3d857e --- /dev/null +++ b/History/2026-08-21-stress-test-egress.md @@ -0,0 +1,32 @@ +# 2026-08-21 — LoadTest: стресс-тест egress (Flask тянет с ВМ) — результаты + +_Дата: 2026-08-21. Инстанс: http-12.containerk8s.dev.nubes.ru (k8s-4-sandbox), образ v2.0.2. +Квота пода: CPU 100m, RAM 200MB, 1 реплика, gunicorn 1 worker (sync)._ + +## Сценарии и результаты + +| Сценарий | Результат | +|---|---| +| Одиночный 1МБ / 10МБ | 200 (0.2с / 0.9с) | +| Одиночный 50МБ | 200 (5.3с) | +| Одиночный 100МБ | **502 ~10с + health 502** → OOM (квота 200МБ) | +| Серия 30×1МБ | 30/30 ok | +| Серия 10×10МБ | 10/10 ok | +| Параллельно 5×1МБ | 5/5 ok (сериализовано 1 worker'ом, 0.17-0.86с) | +| Долгий микс 50 (1МБ+10МБ) | 50/50 ok, health стабилен 200 | +| Повтор 3×50МБ | 3/3 ok (~5.3с стабильно) | +| /fetch на несуществующий URL | 200 от /fetch, status 404 от upstream (обработка ок) | +| /upload 1МБ (входной шлюз) | **HTTP 000 ~10с** — входной шлюз по-прежнему режет >64КБ (ожидаемо) | + +## Выводы +1. **Egress стабилен**: 1МБ-50МБ тянутся надёжно, серии/миксы без сбоев, health держится. +2. **Ограничение — память пода**: файл >~50-80МБ при квоте 200МБ → OOM → 502 (под перезапускается, + потом health 200). Это НЕ проблема egress — это квота + `r.content` (весь файл в памяти). +3. **1 worker (sync)** — параллельные запросы сериализуются (не баг, а режим; для теста ок). +4. Входной шлюз (>64КБ) НЕ обойдён для /upload — но схема «ВМ-буфер» его и не использует + (браузер → ВМ, Flask тянет с ВМ по egress). + +## Рекомендации для прод-варианта +- Поднять квоту памяти (например 1024МБ) ИЛИ потоковая передача (не `r.content`, а `stream=True` + + чтение по частям) — уберёт OOM на 100МБ+. +- При росте нагрузки — увеличить worker'ов gunicorn (сейчас 1).