Олександр Новак
Діагностика / Продакшен

Причину зависань знайшов профіль, а не збіг у часі

Внутрішній аналітичний дашборд зависав до двох хвилин і перезапускався. За добу зависання скоротилось із 83 до 28 секунд, а план прибирає його повністю.

до
зависання до 122 с, контейнер перезапускається
після
28 с у той самий день, структурний план на 3 кроки
Node.js PostgreSQL Docker worker_threads

Контекст. Дашборд, на якому бізнес щодня приймає рішення, рахує показники по ~250 тис. записів за 24 місяці. Одного дня він почав зависати на хвилину-дві й перезапускатися. Команда цілу добу працювала з інструментом, який падав.

Що пішло не так у реакції. Першою версією стала фіча, яку змерджили за кілька хвилин до перших помилок. Її відкотили й назвали причиною, хоча нічого не відтворили. Друга AI-сесія «підтвердила» це з тих самих логів. Після відкату зависання тривали далі.

Що я зробив.

  1. Зняв CPU-профіль продакшену. 73 секунди зі 100 займала робота, яку повторювали для кожного з 24 місяців, хоча від місяця вона не залежала. Ще 37 секунд забирало збирання сміття.
  2. У той самий день виправив головне: ця робота тепер виконується один раз на перерахунок. 83 → 28 секунд, контейнер більше не вмирає.
  3. Запропонував два структурні рішення: винести обчислення в окремий потік із власним кешем і зберігати закриті місяці в базі з версією формули. Друге прибирає ~90% роботи на кожному перерахунку.
  4. Додав процесні запобіжники: заборону мерджів під час інциденту, тест продуктивності на реальному обсязі даних, алерти на довгі зависання.

Висновок. Два AI-агенти, які читають одні й ті самі логи, дають один доказ, а не два. Профіль має бути першим кроком, а не останнім.

← Усі кейси

Зв'язатися

Не впевнені, чи готовий ваш процес до автоматизації?

Пройдіть чек-лист на 15 хвилин або напишіть мені. Стартовий дзвінок на 20 хвилин безкоштовний: кажу, чи це задача для аудиту, і якщо ні, кажу прямо.