Վերադառնալ
Cloudflare-ը Workers-ի և Durable Objects-ի համար CPU-ի և հիշողության պրոֆիլավորում ըստ պահանջի ավելացրեց
SiTech AI Team3 րոպե ընթերցում

Cloudflare-ը Workers-ի և Durable Objects-ի համար CPU-ի և հիշողության պրոֆիլավորում ըստ պահանջի ավելացրեց

Cloudflare-ն այժմ աջակցում է Workers-ի և Durable Objects-ի CPU-ի և հիշողության պրոֆիլավորումն ըստ պահանջի. ինտերակտիվ flamegraph-ները հասանելի են dashboard-ից կամ CLI-ից՝ պրոդուկցիոն տրաֆիկի համար։

Պրոֆիլավորում ըստ պահանջի Workers-ի և Durable Objects-ի համար

Cloudflare-ը ավելացրեց Workers-ի և Durable Objects-ի CPU-ի և հիշողության պրոֆիլավորումը ըստ պահանջի։ Workers Observability-ի էջից մշակողները կարող են հայցել ակտիվ Worker-ի պրոֆիլ, դիտել ինտերակտիվ flamegraph-ով և ներբեռնել ֆայլը։ Ընկերության պնդմամբ՝ պրոդուկցիայում պրոֆիլավորումը լավագույն միջոցն է հավելվածի վարքը հասկանալու համար։

Ինչպես վերցնել պրոֆիլը

Սեսիան սկսվում է Cloudflare Dashboard-ից կամ CLI-ից։ Dashboard-ում ընտրեք Worker, բացեք Observability և Flamegraph-ի մենյուից հայցեք CPU-ի կամ հիշողության պրոֆիլ, ընտրեք տևողությունը և տարբերակը։ CLI-ին անհրաժեշտ է cf փաթեթը և հրաման, օրինակ՝ cf workers versions profile latest worker ID-ով, տևողությամբ և տիպով. արդյունքը pprof ֆայլ է։

Worker-ի պրոֆիլավորման համար բավարար տրաֆիկ է անհրաժեշտ, այնպես որ ընտրեք ակտիվ տարբերակը։ flamegraph-ում ուղղանկյունը ֆունկցիայի կանչն է, լայնությունը ցույց է տալիս նրա CPU ժամանակը կամ հիշողությունը. սեղմումը ֆոկուսացնում է, կուրսորը ցույց է տալիս մանրամասները, աղյուսակը՝ հաճախակի ֆունկցիաները։ TypeScript-ի նախագծերում միացրեք source map-ները, հակառակ դեպքում անունները մշուշված կերևան։

Իրական արդյունքներ

Cloudflare-ի թիմերն արդեն օգտագործել են այս գործառույթը հիշողության և CPU-ի օպտիմիզացիայի, out-of-memory սխալները շտկելու և արտադրողականությունը բարելավելու համար։ R2 binding-ի Worker-ի CPU պրոֆիլը ցույց տվեց, որ genericR2JsonReplacer-ի վրա CPU ժամանակի 5%-ից ավելին էր ծախսվում, քանի որ JSON.stringify-ը ռեկուրսիվ անցնում էր JSON ծառով։ Ուղղումը ֆունկցիան արագացրեց 2,7 անգամ։ Մետրիկի կրկնօրինակված կանչը նույնպես՝ CPU ժամանակի մոտավորապես 1%-ը, վերացվեց արդյունքը փոփոխականում պահելով։

Ներքին Worker-ը հասնում էր 128 MB լիմիտին. P999 հիշողությունը մոտավորապես 133 MB էր, և հաճախ էին „Exceeded Memory“ evictions-ները։ Պրոդուկցիայում վերցված heap պրոֆիլը (pprof) ցույց տվեց, որ Prometheus-ի կոդի վրա բաժանումների մոտավորապես 66,7%-ն էր գալիս, թեև այն անջատված պետք է լիներ։ Հեռացումը P50-ը 70-ից իջեցրեց 54 MB, P90-ը՝ 94-ից 79 MB, P99-ը՝ 113-ից 97 MB, իսկ P999-ը՝ 133-ից 118 MB։

Ինչպես է աշխատում և ինչ է հաջորդը

Պրոֆիլավորումը վերաբերում է իրական պրոդուկցիոն կատարմանը, ուստի նոր իզոլատ չի սկսվում։ runtime-ը պետք է իմանա, թե որ տարբերակը պրոֆիլավորի, արդյոք դրա իզոլատը բեռնված է, և արդյոք այն պատկանում է հաշվին։ Durable Objects-ի համար պահանջը ուղղվում է կոնկրետ օբյեկտին անունով և փոխանցվում է այն metal-ին, որը տիրապետում է ակտորին։

Տրաֆիկի արգելափակումից խուսափելու համար Workers Runtime-ը իզոլատի lock-ը բռնում է միայն profiler-ի կյանքային ցիկլի գործողությունների համար։ CPU պրոֆիլի համար այն ստեղծում է V8 CPU profiler 1 միլիվայրկյան ինտերվալով, բաց է թողնում lock-ը, սպասում է նշված տևողությանը և հետո նորից բռնում այն, որպեսզի կանգնեցնի և սերիալիզացնի արդյունքը։

Cloudflare-ը նշում է սահմանափակումները. սեսիաները պետք է ձեռքով սկսվեն, ուստի կարճաժամկետ խնդիրները կարող են բաց թողնվել. հիշողության պրոֆիլերը ընդգրկում է միայն պրոֆիլավորման պատուհանը, իսկ բեռնման ժամանակ տեղի ունեցած բաշխումները բաց է թողնում։ Ընկերությունը աշխատում է շարունակական պրոֆիլավորման վրա, որը նմուշները ավտոմատ վերցնում է, որպեսզի մշակողները dashboard-ում պրոֆիլները տեսնեն առանց ձեռքով սկսելու։

Աղբյուրներ: The Cloudflare Blog

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։