← Cloudflare Workers / workers / observability / dev-tools
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:
- Spustit
wrangler devpro spuštění vašeho Workeru - Stiskněte klávesu
Dz terminálu pro otevření DevTools - Klikněte na kartu „Memory“
- Odesílejte požadavky na váš Worker a spusťte tak alokaci paměti
- Volitelně můžete zahrnout debugger, abyste mohli pozastavit provádění ve správný okamžik
- Vyberte
Take snapshot
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:
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ěť.
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 ř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.