Наблюдаемость
Profiling: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь в реальном инциденте по латентности — не определение для заучивания, а то, какой профиль снять, как его прочитать и что его числа реально значат под production-нагрузкой.
Убедись, что связываешь экономику sampling, выбор типа профиля, чтение flame graph, символизацию eBPF и production-дисциплину — тот синтез, к которому вели отдельные уроки.
Запрос идёт 500 мс по wall-clock, но CPU profile приписывает ему лишь 20 мс. Куда ушли остальные 480 мс и какой профиль их покажет?
Сервис делает 5 миллионов вызовов функций в секунду. Нужен always-on профайлинг в production. Почему sampling profiler — единственный жизнеспособный выбор против инструментирования?
Инженер указывает на два широких фрейма рядом на одном уровне flame graph и заключает, что левый выполняется раньше правого. Что не так?
eBPF-профайлер показывает чистые стеки для Go и Rust, но множество '[unknown]' фреймов для Python-сервиса на той же ноде. Почему?
Continuous profiler заявлен с overhead 2-5%, но в production ты меряешь 12%. Какую причину проверять первой?
На разборе инцидента кто-то предлагает приложить production-профиль к тикету в поддержку вендора. Почему senior-инженер должен возразить?
Сквозная линия юнита — одна диагностическая петля: выбери профиль, который отвечает на твой вопрос (CPU для вычислений, off-CPU/block/mutex для ожидания, heap/allocation для памяти), читай flame graph правильно (ширина — доля сэмплов, ось x алфавитная, а не время) и доверяй числам только зная их пределы (sampling ограничен, но слеп к hot-путям короче интервала, eBPF требует language-aware символизации, overhead 2-5% реален, но чувствителен к конфигу). А поскольку профиль раскрывает внутренности кода, относись к нему как к чувствительному артефакту, а не к свободно шарящейся метрике.