← Cloudflare Workers / workers / observability / dev-tools
Профилирование использования CPU
Если Worker тратит слишком много времени на выполнение ресурсоёмких задач, ответы могут замедлиться, либо Worker может не запуститься из-за ограничения по времени.
Профилирование в DevTools помогает находить и исправлять код, который использует слишком много CPU.
Измерить время выполнения отдельных функций в production может быть сложно, поскольку Workers увеличивать таймеры только при операциях ввода-вывода в целях безопасности. Однако при локальной разработке измерить время выполнения CPU можно с помощью DevTools.
При использовании DevTools для отслеживания нагрузки на CPU бывает сложно воспроизвести конкретное поведение, которое вы наблюдаете в продакшене. Чтобы имитировать поведение продакшена, убедитесь, что запросы к локальному Worker похожи на запросы в продакшене. Это может означать отправку большого количества запросов, обращение к конкретным маршрутам или использование данных, приближенных к продакшену, с помощью удаленные привязки.
Снятие профиля
Чтобы создать профиль CPU:
- Запустите
wrangler devчтобы запустить ваш Worker - Нажмите клавишу
Dклавишу в терминале, чтобы открыть DevTools - Откройте вкладку «Profiler»
- Выберите
Startчтобы начать запись использования CPU - Отправка запросов своему Worker из новой вкладки
- Выберите
Stop
Теперь у вас есть профиль CPU.
Пример профиля
Рассмотрим пример, чтобы разобраться, как читать CPU-профиль. Представим, что у вас есть следующий Worker:
const addNumbers = (body) => {
for (let i = 0; i < 5000; ++i) {
body = body + " " + i;
}
return body;
};
const moreAddition = (body) => {
for (let i = 5001; i < 15000; ++i) {
body = body + " " + i;
}
return body;
};
export default {
async fetch(request, env, ctx) {
let body = "Hello Profiler! - ";
body = addNumbers(body);
body = moreAddition(body);
return new Response(body);
},
};Вы хотите найти, какая часть кода вызывает медленные ответы. Как использовать профилирование DevTool, чтобы найти код, нагружающий CPU, и устранить проблему?
Сначала, как упоминалось выше, откройте DevTools, нажав D ключ после выполнения wrangler dev. Затем
перейдите на вкладку «Profiler» и снимите профиль, нажав Start и отправки запроса.
Верхний график на этом изображении показывает временную шкалу профиля, с его помощью можно приблизить конкретный запрос.
На диаграмме ниже показано время CPU, затраченное на операции, выполненные во время запроса. На этом снимке экрана вы можете увидеть
время "fetch" наверху и вложенные в него компоненты fetch ниже, включая две функции addNumbers и
moreAdditions. При наведении на блок отображается дополнительная информация, а при клике по блоку выполняется переход
к исходному коду функции.
С помощью этого графика можно ответить на вопрос «что расходует процессорное время?». Этот addNumbers функция имеет
очень маленький блок, который представляет 0.3ms процессорного времени. moreAdditions блок больше, что соответствует 2,2 мс процессорного времени.
Поэтому, если вы хотите ускорить время ответа, вам нужно оптимизировать moreAdditions.
Также можно изменить визуализацию с «Chart» на «Heavy (Bottom Up)», чтобы получить альтернативное представление.
Здесь показано относительное время, затраченное на каждую функцию. В верхней части списка moreAdditions явно является
самой медленной частью вашего Worker. Также видно, что сборка мусора занимает значительную долю времени, поэтому
оптимизация памяти может быть полезной.
Дополнительные материалы
Подробнее о том, как использовать профилировщик CPU, см. Документация Google о профилировании CPU в DevTools ↗.
Чтобы узнать, как использовать DevTools для анализа использования памяти, см. Документация по использованию памяти.