В FastAPI-сервисе каждые ~60 сек появляются p95/p99 всплески латентности. Профилирование показывает короткие стопы event loop во время циклических сборок мусора CPython. Как диагностировать и сгладить проблему, не «просто отключая GC»?
Включить телеметрию GC (callbacks, gc.get_stats()/get_threshold()) и пламеграфы (py-spy) вокруг пауз; найти источники циклов (крупные графы объектов, замыкания/кеши) через tracemalloc/objgraph. Снизить аллокации и циклы: __slots__, иммутабельные структуры, orjson, реюз буферов. Настроить GC: поднять пороги gc.set_threshold(...), вынести gc.collect() в фоновую периодику/idle-хуки, для hot-path — локально отключать циклический GC на время обработки и снова включать. Проверить, что паузы ушли и p99 сгладился.
Библиотека собеса по Python
Post #1056
1.07K
- ❤ 8