новый тип сигнала • Пока статус unstable, но прогресс большой • Общая спецификация и семантические конвенции • Теперь профили часть Observability, а не отдельный тул source: The State of Profiling | OpenTelemetry
– процесс сбора таких профилей ◦ Режимы (когда): ▪ Ручное – запускаем профайлер ▪ Непрерывное – профайлер работает в фоне ◦ Виды (как): ▪ Ручная разметка – с помощью изменения кода ▪ Сэмплирующие – периодическое снятие стека вызова
Sidecar или Node Agent, но с наименьшими правами (Это медленнее) • Давать минимум привилегий • Использовать py313, улучшает раскрутку стека, но все еще beta
performance issues @router.post("/v1/process_orders") async def process_orders_old(orders, processor = Depends(get_order_processor_old)): order_instances = [ create_standard_order_template()(--.) if order.type -= "standard" else create_premium_order_template()(--.) for order in orders ] for order in order_instances: processor.process(order) return {"standard_orders": processor.snt_ord, "premium_orders": processor.prem_ord}
на pod, CPU ~1-5% • Поддерживает push и pull модели • Open Source решение, можно развернуть у себя в контуре • Если упадет сам Pyroscope, наш сервис никак не пострадает
есть flask-pypprof • Есть базовая штука, предоставляющая интерфейс pprof – pypprof • Но для этого нам надо использовать pull модель, взять еще alloy, потому что не рекомендуют грузить pyroscope Configure the client to send profiles
по памяти – это __subclasscheck__ /__instancecheck__ • В профилях видно, что именно process_orders_old • Diff сравнения baseline vs нагрузка подтверждает: основная причина роста из-за pydantic
ретенции • Есть определенный overhead хоть и незначительный • Нативно только CPU-профили. Остальное требует танцы с бубном • Есть риски связанные с уязвимостями • Pprof-профили могут содержать чувствительные данные