
Cloudflare-მ Workers-ისა და Durable Objects-ისთვის CPU-ისა და მეხსიერების პროფაილირება მოთხოვნით დაამატა
Cloudflare ახლა მხარს უჭერს Workers-ისა და Durable Objects-ის CPU-ისა და მეხსიერების პროფაილირებას მოთხოვნით; ინტერაქტიული flamegraph-ები დაშბორდიდან ან 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 აღნიშნავს შეზღუდვებს: სესიები ხელით უნდა დაიწყოს, ამიტომ ხანმოკლე პრობლემები შეიძლება გამოტოვდეს; მეხსიერების პროფაილერი მხოლოდ პროფაილირების ფანჯარას ფარავს, დატვირთვისას მომხდარ განაწილებებს კი გამოტოვებს. კომპანია მუშაობს უწყვეტ პროფაილირებაზე, რომელიც ნიმუშებს ავტომატურად იღებს, რათა დეველოპერებმა დაშბორდში პროფილები ხელით დაწყების გარეშე ნახონ.
წყაროები: The Cloudflare Blog
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.