
Cloudflare додав профілювання CPU та пам'яті для Workers і Durable Objects на вимогу
Cloudflare тепер підтримує профілювання CPU та пам'яті для Workers і Durable Objects на вимогу; інтерактивні flamegraph-и доступні з дашборду або CLI для продакшн-трафіку.
Профілювання на вимогу для Workers і Durable Objects
Cloudflare додав профілювання CPU та пам'яті для Workers і Durable Objects на вимогу. Зі сторінки Workers Observability розробники можуть запитати профіль активного Worker, переглянути його за допомогою інтерактивного flamegraph та завантажити файл. За словами компанії, профілювання в продакшені — це найкращий спосіб зрозуміти поведінку програми.
Як отримати профіль
Сесія починається з Cloudflare Dashboard або CLI. У Dashboard оберіть Worker, відкрийте Observability і з меню Flamegraph запросіть профіль CPU або пам'яті, виберіть тривалість та версію. Для CLI потрібен пакет cf та команда, наприклад cf workers versions profile latest з ID worker, тривалістю та типом; результатом є файл pprof.
Для профілювання Worker потрібен достатній трафік, тому оберіть активну версію. У flamegraph прямокутник — це виклик функції, ширина показує її час CPU або пам'ять; клік фокусує, курсор показує деталі, таблиця — часті функції. У проєктах TypeScript увімкніть source map, інакше імена будуть замінені.
Реальні результати
Команди Cloudflare вже використали цю функцію для оптимізації пам'яті та CPU, усунення помилок out-of-memory та підвищення продуктивності. Профіль CPU Worker для R2 binding показав, що на genericR2JsonReplacer припадало понад 5% часу CPU, оскільки рекурсивно викликався JSON.stringify на JSON-дереві. Виправлення прискорило функцію в 2,7 рази. Дубльований виклик метрики, близько 1% часу CPU, також усунуто збереженням результату у змінній.
Внутрішній Worker вичерпував ліміт 128 MB: пам'ять P999 становила близько 133 MB і часто відбувалися „Exceeded Memory“ evictions. heap профіль (pprof), отриманий у продакшені, показав, що на код Prometheus припадало близько 66,7% розподілів, хоча він мав бути вимкнений. Видалення знизило P50 з 70 до 54 MB, P90 з 94 до 79 MB, P99 з 113 до 97 MB, а P999 — з 133 до 118 MB.
Як це працює та що далі
Профілювання стосується реального продакшн-виконання, тому новий ізолят не запускається. runtime має знати, яку версію профілювати, завантажений його ізолят чи ні та чи належить він обліковому запису. Для Durable Objects запит спрямовується на конкретний об'єкт за ім'ям і переходить на той metal, який володіє актором.
Щоб запобігти блокуванню трафіку, Workers Runtime утримує lock ізолята лише для операцій життєвого циклу профайлера. Для профілю CPU він створює V8 CPU profiler з інтервалом 1 мілісекунда, звільняє lock, чекає вказану тривалість, а потім знову утримує його, щоб зупинити та серіалізувати результат.
Cloudflare зазначає обмеження: сесії мають запускатися вручну, тому короткочасні проблеми можуть бути пропущені; профайлер пам'яті охоплює лише вікно профілювання, пропускаючи розподіли, що сталися під час завантаження. Компанія працює над неперервним профілюванням, яке автоматично бере зразки, щоб розробники могли бачити профілі в дашборді без ручного запуску.
Джерела: The Cloudflare Blog
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.