Cloudflare, Workers ve Durable Objects hizmetleri için isteğe bağlı CPU ve bellek kullanım profillemesini kullanıma sundu. Böylece geliştiriciler profilleri doğrudan üretim ortamından toplayabilir ve bunları etkileşimli alev grafikleri şeklinde görüntüleyebilir. Özellik, yalnızca toplam günlükler ve metriklere güvenmek yerine CPU zamanı tüketen veya en fazla belleği ayıran işlevleri belirlemeyi sağlıyor.
Profilleme, Cloudflare kontrol panelindeki Workers Observability sayfasından veya komut satırı arayüzü üzerinden başlatılabilir. Geliştirici profil türünü, CPU ya da memory, ve toplama süresini belirler; ayrıca Worker'ın farklı sürümlerini seçebilir. Oturum sona erdikten sonra etkileşimli grafik incelenebilir ve profil dosyası başka araçlarla analiz edilmek üzere indirilebilir.
Alev grafikleri ne gösteriyor?
Grafikteki her dikdörtgen bir işlev çağrısını temsil eder; genişliği ise onunla ilişkili CPU süresini veya belleği gösterir. İşlevlere tıklanarak odak genişletilebilir ya da sonuçlar örnek sayısına göre sıralanmak üzere tablo görünümü kullanılabilir. Cloudflare, birden fazla profil alınmasını ve daha geniş işlevlerin aranmasını öneriyor. Ayrıca TypeScript projelerinde source maps etkinleştirilerek işlev adlarının belirsiz görünmesi önlenebilir.
Profilleme, yeterli trafik alan yayımlanmış bir sürümün seçilmesini gerektirir. Hizmet ölçüm amacıyla yeni bir yalıtım oluşturmaz; çünkü amaç üretimdeki gerçek çalışmayı izlemektir. Beş saniyelik bir CPU profili almak için aşağıdaki komut kullanılabilir:
cf workers versions profile latest --worker-id "$WORKER_ID_OR_NAME" --duration-ms 5000 --profile-type cpu > worker-cpu.pprof
Cloudflare'ın sunduğu pratik sonuçlar
Cloudflare, aracı R2 bağlaması uygulayan bir Worker'ı analiz etmek için kullandı. Profilleme, genericR2JsonReplacer işlevinin JSON.stringify yürütülürken JSON ağacını yeniden taradığını ve bunun bazı durumlarda iç içe bir değerin beş kez işlenmesine yol açtığını gösterdi. Bunun düzeltilmesi işlevi 2,7 kat hızlandırdı. Profilleme ayrıca metrics için tekrarlanan bir çağrı olduğunu ortaya çıkardı; sonucu depolayıp yeniden kullanmak CPU tüketimini azaltmak için yeterli oldu.
Başka bir durumda Worker'lardan biri 128 megabaytlık bellek sınırını aşıyordu. P999 bellek tüketimi yaklaşık 133 megabayta ulaşmış ve bu da “Exceeded Memory” hatalarına neden olmuştu. Heap profili, tahsislerin yaklaşık %66,7'sinden sorumlu Prometheus kodunun devre dışı olduğuna inanılmasına rağmen kısmen hâlâ çalıştığını gösterdi. Kod yolunun tamamı kaldırıldıktan sonra P999 133'ten 118 megabayta düşerken P50 de 70'ten 54 megabayta geriledi.
Pratikte ne değişiyor?
Bu özellik, geliştirme ekiplerine Workers'ın gerçek koşullar altında yürütülmesine doğrudan görünürlük sağlıyor; trafik ve yalıtımların dağılımı yerel geliştirme ortamından farklı olabilir. Platform, Workers'ın birden fazla veri merkezi ve cihaza dağıtılmasının karmaşıklığını ele alırken geliştirici, Durable Objects'te belirli bir nesnenin adını kullanarak özellikle onu çalıştıran yalıtım için profil alabilir.
Yürütme mekanizması, toplama sırasında isteklerin alınmaya devam etmesini sağlıyor. Yalıtım kilidi yalnızca profilleme başlatılırken ve durdurulurken tutuluyor; ardından belirtilen süre boyunca her bir milisaniyede bir CPU örnekleri toplanıyor. Durable Objects ise durum bilgisi taşıyan yapılarından yararlanarak profilleme isteğini belirli nesnenin yalıtımına ve sahibi olan tarafa yönlendiriyor.
Sınırlamalar ve sonraki adım
Profilleme otomatik olarak başlamadığından oturum, sorunun meydana geldiği kısa veya nadir dönemleri kaçırabilir. Bellek profilleyici yalnızca ölçüm aralığında gerçekleşen tahsisleri gösterir ve başlangıçtan kaynaklanan tüketimi mutlaka yakalamaz. Cloudflare, örnekleri otomatik olarak toplayacak ve daha sonra kontrol panelinden incelenmelerini sağlayacak sürekli profilleme üzerinde çalıştığını söylüyor.