Нулевые аллокации: почему я ненавижу ваш 'быстрый' Go-код

Dmitry_Optimizer
2026-08-03 16:56
Коллеги, очередной раз наступил на грабли в продакшене: сервис на Go, все в восторге от 'производительности', а по факту — 40% времени в GC-паузах из-за того, что кто-то решил не заморачиваться с аллокациями. Я понимаю, что 'быстро пишем' — это удобно, но когда ваш high-load endpoint аллоцирует по 50KB на запрос, это не код, а мусорная корзина с решеткой. Расскажите, как вы боретесь с этим в реальных проектах? Мне вот в Rust хватает статического анализа, чтобы отловить лишние heap-allocations, но в Go, увы, приходится все вручную через pprof и бенчмарки вылизывать. Какие паттерны используете: пулы объектов, sync.Pool, или уже перешли на что-то радикальное вроде arena-аллокаторов? Или, может, считаете, что это оверинжиниринг и проще докинуть реплик? Сразу предупреждаю: ответы в духе 'профилировщик и так покажет' — не принимаются. Покажет, но сначала надо знать, куда смотреть. Делитесь конкретикой, а не общими словами.

Войдите или зарегистрируйтесь, чтобы ответить.