← Cloudflare Workers / workers / observability / dev-tools
Profilování využití CPU
Pokud Worker tráví příliš mnoho času prováděním úloh náročných na CPU, mohou být odpovědi pomalé nebo se Worker nemusí spustit kvůli časové limity.
Profilování v DevTools vám pomůže odhalit a opravit kód, který využívá příliš mnoho CPU.
Měření doby provádění konkrétních funkcí v produkčním prostředí může být obtížné, protože Workers časovače inkrementovat pouze při I/O z bezpečnostních důvodů. Měření doby běhu CPU je však možné při lokálním vývoji pomocí DevTools.
Při sledování využití CPU pomocí DevTools může být obtížné replikovat konkrétní chování, které pozorujete v produkci. Abyste chování produkce napodobili, zajistěte, aby požadavky odesílané na lokální Worker byly podobné požadavkům v produkci. To může znamenat odesílání velkého objemu požadavků, odesílání požadavků na konkrétní trasy nebo použití dat podobných produkčním prostřednictvím vzdálené bindings.
Pořízení profilu
Chcete-li vygenerovat profil CPU:
- Spustit
wrangler devpro spuštění vašeho Workeru - Stiskněte klávesu
Dklávesu ve svém terminálu, čímž otevřete DevTools - Vyberte kartu „Profiler“
- Vyberte
Startpro zahájení záznamu využití CPU - Odesílejte požadavky na váš Worker z nové karty
- Vyberte
Stop
Nyní máte k dispozici CPU profil.
Příklad profilu
Podívejme se na příklad, jak číst profil CPU. Představte si, že máte následující 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);
},
};Chcete zjistit, která část kódu způsobuje pomalé odezvy. Jak pomocí profilování v DevTools identifikujete kód náročný na CPU a opravíte problém?
Nejprve otevřete DevTools, jak už bylo zmíněno výše, stisknutím klávesy D klíč po spuštění wrangler dev. Poté
přejdete na záložku „Profiler“ a vytvoříte profil stisknutím Start a odeslání požadavku.
Horní graf na tomto obrázku zobrazuje časovou osu profilu a můžete jej použít k přiblížení na konkrétní požadavek.
Graf níže zobrazuje čas CPU využitý operacemi spuštěnými během požadavku. Na tomto snímku obrazovky vidíte
čas „fetch“ nahoře a pod ním dílčí komponenty fetch, včetně dvou funkcí addNumbers a
moreAdditions. Najetím myší na jednotlivé rámečky zobrazíte další informace a kliknutím na rámeček přejdete
na zdrojový kód dané funkce.
Pomocí tohoto grafu můžete zodpovědět otázku „co zabírá čas procesoru?“. Tento addNumbers funkce má
velmi malý obdélník, který představuje 0.3ms času CPU. moreAdditions rámeček je větší, což představuje 2,2 ms času CPU.
Chcete-li tedy zrychlit doby odezvy, musíte optimalizovat moreAdditions.
Vizualizaci můžete také změnit z ‘Chart’ na ‘Heavy (Bottom Up)’ pro alternativní pohled.
Toto zobrazuje relativní čas přidělený jednotlivým funkcím. Na začátku seznamu moreAdditions je jednoznačně
nejpomalejší částí vašeho Workeru. Vidíte také, že garbage collection představuje velké procento času, takže
optimalizace paměti by mohla být užitečná.
Další zdroje
Další informace o používání profileru CPU naleznete v Dokumentace Google k profilování CPU v DevTools ↗.
Chcete-li se dozvědět, jak pomocí DevTools získat přehled o využití paměti, přečtěte si Dokumentace k využití paměti.