איך משתמשים בכלי לניתוח הקצאה

Meggin Kearney
Meggin Kearney

אפשר להשתמש בכלי ליצירת פרופיל הקצאות כדי למצוא אובייקטים שלא נאספים כראוי לאשפה ולהמשיך לשמור על הזיכרון.

איך פועל הכלי

הכלי ליצירת פרופיל ההקצאה משלב את המידע המפורט של תמונת המצב של הכלי ליצירת תמונת מצב של הזיכרון, עם העדכון המצטבר והמעקב המצטבר של חלונית ציר הזמן. בדומה לכלים האלו, כדי לעקוב אחרי הקצאת הזיכרון של אובייקטים, צריך להתחיל הקלטה, לבצע רצף של פעולות ואז להפסיק את ההקלטה לצורך ניתוח.

הכלי מצלם תמונות מצב של הערימה מדי פעם במהלך ההקלטה (בתדירות של כל 50 אלפיות השנייה!) ותמונת מצב סופית אחת בסוף ההקלטה.

כלי לניתוח נתוני הקצאה

הפעלת הכלי לניתוח ביצועי הקצאות

כדי להתחיל להשתמש בכלי לניתוח ביצועי ההקצאה:

  1. מוודאים שמותקנת הגרסה העדכנית של Chrome Canary.
  2. פותחים את 'כלים למפתחים' ולוחצים על סמל גלגל השיניים בפינה השמאלית התחתונה.
  3. עכשיו, פותחים את חלונית Profiler. הפרופיל אמור להופיע בשם "Record Heap Allocations" (הקלטת הקצאות של ערימה).

הקלטת הכלי לניתוח הקצאות של ערימה (heap allocation)

קריאת פרופיל של הקצאת ערימה (heap allocation)

הפרופיל של הקצאת הערימה (heap allocation) מראה את המיקום שבו נוצרים האובייקטים ומזהה את הנתיב לשמירה. בתמונת המצב שלמטה, העמודות שלמעלה מציינות מתי נמצאו אובייקטים חדשים בערימה.

הגובה של כל עמודה תואם לגודל של האובייקטים שהוקצו לאחרונה, והצבע של העמודות מציין אם האובייקטים האלה עדיין קיימים בתמונת המצב הסופית של הערימה (heap snapshot). עמודות כחולות מציינות אובייקטים שעדיין נמצאים בסוף ציר הזמן, ופסים אפורים מציינים אובייקטים שהוקצו במהלך ציר הזמן אבל מאז נאספו אשפה:

תמונת מצב של פרופיל ההקצאה

בתמונת המצב הבאה, בוצעה פעולה 10 פעמים. בתוכנית לדוגמה נשמרים חמישה אובייקטים במטמון, לכן צפויים חמשת הפסים הכחולים האחרונים. עם זאת, הפס הכחול בחלק הימני ביותר מצביע על בעיה אפשרית.

לאחר מכן תוכלו להשתמש בפסי ההזזה בציר הזמן שלמעלה כדי להגדיל את התצוגה של תמונת המצב הספציפית הזו, ולראות את האובייקטים שהוקצו לאחרונה בנקודה הזו:

הגדלת התצוגה של תמונת המצב

לחיצה על אובייקט ספציפי בערימה תציג את עץ השימור שלו בחלק התחתון של תמונת המצב של הערימה. כשבוחנים את הנתיב השומר לאובייקט, מקבלים מספיק מידע כדי להבין למה האובייקט לא נאסף, ואפשר לבצע את השינויים הנדרשים בקוד כדי להסיר את ההפניה המיותרת.

הצגה של הקצאת הזיכרון לפי פונקציה

ניתן גם להציג את הקצאת הזיכרון לפי פונקציית JavaScript. מידע נוסף זמין במאמר חקירת הקצאת זיכרון לפי פונקציה.