
Cloudflare הוסיף פרופילינג מבוקש של CPU וזיכרון עבור Workers ו-Durable Objects
Cloudflare תומכת כעת בפרופילינג מבוקש של CPU וזיכרון עבור Workers ו-Durable Objects; flamegraphs אינטראקטיביים זמינים מהדשבורד או מ-CLI עבור תעבורת פרודקשן.
פרופילינג מבוקש עבור Workers ו-Durable Objects
Cloudflare הוסיף פרופילינג מבוקש של CPU וזיכרון עבור Workers ו-Durable Objects. מדף Workers Observability מפתחים יכולים לבקש פרופיל של Worker פעיל, לעיין בו באמצעות flamegraph אינטראקטיבי ולהוריד את הקובץ. לפי החברה, פרופילינג בפרודקשן הוא הדרך הטובה ביותר להבין את התנהגות האפליקציה.
איך לקחת פרופיל
הסשן מתחיל מ-Cloudflare Dashboard או מ-CLI. ב-Dashboard יש לבחור Worker, לפתוח את Observability ומתפריט Flamegraph לבקש פרופיל CPU או זיכרון, לבחור משך וגרסה. ל-CLI נדרש חבילת cf ופקודה, למשל cf workers versions profile latest עם מזהה Worker, משך וסוג; התוצאה היא קובץ pprof.
לפרופילינג של Worker נדרשת תעבורה מספקת, לכן יש לבחור גרסה פעילה. ב-flamegraph מלבן מייצג קריאה לפונקציה, ורוחבו מציג את זמן ה-CPU או הזיכרון שלה; לחיצה ממקדת, הסמן מציג פרטים, וטבלה מציגה פונקציות נפוצות. לפרויקטי TypeScript יש להפעיל source maps, אחרת השמות יופיעו מקודדים.
תוצאות בעולם האמיתי
צוותי Cloudflare כבר השתמשו בפיצ'ר זה לאופטימיזציה של זיכרון ו-CPU, לתיקון שגיאות out-of-memory ולשיפור הביצועים. פרופיל ה-CPU של Worker עם R2 binding הראה שמעל 5% מזמן ה-CPU הוקדש ל-genericR2JsonReplacer, מכיוון שהוא עבר רקורסיבית על עץ JSON ב-JSON.stringify. התיקון האיץ את הפונקציה פי 2.7. גם קריאה כפולה למטריקה, שכללה כ-1% מזמן ה-CPU, נפתרה באמצעות שמירת התוצאה במשתנה.
Worker פנימי פג במגבלה של 128 MB: זיכרון P999 היה כ-133 MB והיו evictions תכופים של „Exceeded Memory". פרופיל heap שנלקח בפרודקשן (pprof) הראה שכ-66.7% מההפצות היו לקוד Prometheus, למרות שהוא היה אמור להיות מכובה. המחיקה הורידה את P50 מ-70 ל-54 MB, P90 מ-94 ל-79 MB, P99 מ-113 ל-97 MB, ו-P999 מ-133 ל-118 MB.
איך זה עובד ומה הלאה
הפרופילינג נוגע בביצועי פרודקשן אמיתיים, ולכן לא מופעל isolate חדש. ה-runtime חייב לדעת איזו גרסה לפרופיל, האם ה-isolate שלה נטען והאם הוא שייך לחשבון. עבור Durable Objects הבקשה מופנית לאובייקט ספציפי לפי שם ומועברת ל-metal שמחזיק ב-actor.
כדי למנוע חסימת תעבורה, Workers Runtime לוכד את lock ה-isolate רק עבור פעולות מחזור החיים של ה-profiler. עבור פרופיל CPU הוא יוצר V8 CPU profiler במרווח של 1 מילישנייה, משחרר את ה-lock, ממתין למשך שצוין ואז לוכד שוב כדי לעצור ולבצע דה-סריאליזציה של התוצאה.
Cloudflare מציין מגבלות: סשנים חייבים להיפתח ידנית, ולכן בעיות קצרות מועד עשויות להיפסח; פרופיילר הזיכרון מכסה רק את חלון הפרופילינג ומדלג על הפצות שקרו בזמן הטעינה. החברה עובדת על פרופילינג רציף שלוקח דגימות אוטומטית, כך שמפתחים יוכלו לראות פרופילים בדשבורד ללא צורך בהפעלה ידנית.
מקורות: The Cloudflare Blog
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.