Async-сервис читает сообщения из Kafka и для каждого делает asyncio.create_task(process(msg)). Под пиковыми нагрузками растут задержки и RSS памяти, при этом CPU невысокий. В чём причина и как это исправить?
“Fire-and-forget” порождает неограниченное число задач, накапливается бэклог и объекты удерживаются в памяти до завершения тасков. Введите backpressure: ограничьте параллелизм через Semaphore/bounded Queue, батчируйте и await’ьте завершение (например, через пул воркеров или лимитированный gather), используйте pause/resume у Kafka-клиента, таймауты/отмену подвисших задач и корректные finally для освобождения ресурсов.
Библиотека собеса по Python
Post #1043
1.15K
- 👍 2