Выгрузка каталога в JSON поднимает память пода на полтора гигабайта
products, _ := h.repo.AllProducts(ctx) // 400 тысяч товаров
data, err := json.Marshal(products)
if err != nil { ... }
w.Write(data)
Во время выгрузки память пода подскакивает на 1,5 ГБ, а при двух одновременных выгрузках под убивается по лимиту. Как снизить потребление памяти?
- Читать курсором и писать в ответ потоком через Encoder
- Вызвать runtime.GC() после json.Marshal
- Сжать data перед отправкой
- Увеличить GOGC до 400
