INTEGRITY Dokumentace

Profilování paměti

Pochopení využití paměti Workeru vám pomůže optimalizovat výkon a vyhnout se chybám nedostatku paměti (OOM) při dosažení Limity paměti Workeru, a opravu úniků paměti.

Využití paměti můžete profilovat pomocí snímků v DevTools. Snímky paměti vám umožní zobrazit přehled využití paměti, zjistit, kolik paměti je přiděleno různým typům dat, a získat podrobnosti o konkrétních objektech v paměti.

Při profilování využití paměti 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 pomocí příznak --remote.

Pořízení snímku

Chcete-li vygenerovat snímek paměti:

Nyní můžete prozkoumat paměť Workeru.

Příklad snímku

Podívejme se na příklad, jak číst snímek paměti. Představte si, že máte následující Worker:

index.js
let responseText = "Hello world!";

export default {
	async fetch(request, env, ctx) {
		let now = new Date().toISOString();
		responseText = responseText + ` (Requested at: ${now})`;
		return new Response(responseText.slice(0, 53));
	},
};

Tento kód sice zpočátku fungoval dobře, postupem času si však všimnete pomalejších odpovědí a chyb Out of Memory. Pomocí DevTools můžete zjistit, jestli jde o únik paměti.

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 kartu „Memory“.

Dále vygenerujte velký objem provozu na Worker odesíláním požadavků. Můžete k tomu použít curl nebo opakovaným obnovováním stránky v prohlížeči. Jiné Workers mohou k reprodukci úniku paměti vyžadovat konkrétnější požadavky.

Poté klikněte na tlačítko "Take Snapshot" a zobrazte výsledky.

Nejprve přejděte v rozbalovací nabídce na "Statistics", abyste získali základní přehled o tom, co zabírá paměť.

Statistiky paměti

Při pohledu na tyto statistiky vidíte, že velké množství paměti připadá na řetězce, celkem 67 kB. To je pravděpodobně zdroj úniku paměti. Pokud provedete více požadavků a pořídíte další snímek, uvidíte, že toto číslo poroste.

Souhrn paměti

Souhrn paměti řadí datové typy podle množství paměti, kterou zabírají. Po kliknutí na "(string)" uvidíte řetězec, který je mnohem větší než ostatní. Text ukazuje, že opakovaně připojujete "Requested at" a datum, čímž neúmyslně přepisujete globální proměnnou stále delším řetězcem:

responseText = responseText + ` (Requested at: ${now})`;

Pomocí Memory Snapshotting v DevTools jste identifikovali objekt a řádek kódu, který způsobuje únik paměti. Nyní jej můžete opravit malou úpravou kódu.

Další zdroje

Další informace o používání Memory Snapshotting naleznete v Dokumentace Google k Memory Heap Snapshots.

Chcete-li se dozvědět, jak pomocí DevTools získat přehled o využití CPU, přečtěte si Dokumentace k profilování CPU.