INTEGRITY Dokumentace

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:

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:

index.js
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.

Profil CPU

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.

Profil CPU

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.