מדריך לפרופיל async

1. סקירה כללית

פרופילי דגימת Java מתוכננים בדרך כלל באמצעות ממשק הכלי JVM (JVMTI) ואוספים עקבות מחסנית בנקודה בטוחה. לכן, פרופילי דגימה אלה יכולים לסבול מבעיית הטיה בנקודת הבטיחות.

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

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

2. פרופיל אסינק

פרופיל אסינק הוא פרופיל דגימה לכל JDK המבוסס על JSM של HotSpot. יש לו תקורה נמוכה ולא מסתמך על JVMTI.

זה מונע את בעיית ההטיה של נקודה בטוחה באמצעות AsyncGetCallTrace ממשק API המסופק על ידי HotSpot JVM לפרופיל נתיבי קוד Java ו- Linux אירועים מושלמים כדי לפרופיל את נתיבי הקוד המקורי.

במילים אחרות, הפרופילר תואם לערימות קריאה של קוד Java ונתיבי קוד מקורי כדי לייצר תוצאות מדויקות.

3. התקנה

3.1. הַתקָנָה

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

לאחר ההורדה נוכל לבדוק אם זה עובד על הפלטפורמה שלנו:

$ ./profiler.sh - גרסה
Async-profiler 1.7.1 נבנה ב -14 במאי 2020 זכויות יוצרים 2016-2020 אנדריי פאנגין

זה תמיד רעיון טוב לבדוק את כל האפשרויות הזמינות באמצעות פרופיל אסינק מִרֹאשׁ:

$ ./profiler.sh
שימוש: ./profiler.sh [פעולה] [אפשרויות] פעולות: התחל התחל פרופיל וחזור מיד המשך קורות חיים פרופיל מבלי לאפס נתונים שנאספו הפסק הפסקת פרופיל בדוק אם אירוע הפרופיל שצוין זמין סטטוס הדפס פרופיל רשימת סטטוסים פרופילי אירועים שתומכים JVM היעד לאסוף פרופיל איסוף לפרק הזמן שצוין ואז להפסיק (פעולת ברירת מחדל) אפשרויות: אירוע פרופיל אירוע פרופיל: מעבד | הקצה | נעילה | החמצת מטמון וכו '. פרופיל משך זמן פרופיל למשך שניות - פלט dump קובץ שם עד -אי מרווח דגימת מרווח בננו-שניות -j jstackdepth מקסימום Java stack עומק -b bufsize גודל מסגרת חיץ -t פרופיל חוטים שונים בנפרד -שמות כיתות פשוטים במקום FQN -g חתימות שיטת הדפסה -הערה שמות שיטות Java -o פלט fmt פורמט: סיכום | עקבות | שטוח | מכווץ | svg | עץ | jfr -I כולל פלט רק עקבות מחסנית המכילות את התבנית שצוינה -X לא לכלול עקבות מחסנית עם התבנית שצוינה -V, - תצוגת הגרסה ve מחרוזת rsion - כותרת מחרוזת כותרת SVG - רוחב px רוחב SVG - גובה px גובה SVG מסגרת - px רוחב מינימלי לדלג על מסגרות קטנות יותר מ- px - להפיק הפוכה מחסנית FlameGraph / עץ - כל הגרעינים כוללים את הגרעין- אירועי מצב - כל המשתמשים כוללים רק אירועי מצב משתמש - מצב סטאק כיצד לחצות C stack: fp | lbr | no הוא מזהה תהליך מספרי של מילת המפתח JVM או מילת המפתח 'jps' כדי למצוא JVM פועל באופן אוטומטי

רבות מהאפשרויות המוצגות יהיו שימושיות בסעיפים המאוחרים יותר.

3.2. תצורת ליבה

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

ראשית, נגדיר את perf_event_paranoid עד 1, שיאפשר לפרופילר לאסוף מידע על ביצועים:

$ sudo sh -c 'הד 1> / proc / sys / kernel / perf_event_paranoid'

לאחר מכן, נגדיר את kptr_restrict עד 0 כדי להסיר את ההגבלות על חשיפת כתובות הליבה:

$ sudo sh -c 'הד 0> / proc / sys / kernel / kptr_restrict'

אולם, ה פרופיל אסינק יעבוד מעצמו בפלטפורמת macOS.

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

$ java -XX: + UnlockDiagnosticVMOptions -XX: + DebugNonSafepoints -jar path-to-jar-file

פה, התחלנו את אפליקציית הפרופיל שלנו באמצעות -XX: + UnlockDiagnosticVMOptions -XX: + DebugNonSafepoints דגלי JVM מומלצים מאוד לקבלת תוצאות מדויקות.

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

4. פרופיל מעבד

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

בואו לפרופיל את היישום שלנו באמצעות ה- PID שלו:

$ ./profiler.sh -e cpu -d 30 -o סיכום 66959 התחיל פרופיל [cpu] --- פרופיל ביצוע --- דוגמאות סה"כ: 28 שימוש במאגר מסגרות: 0.069%

הנה, הגדרנו את מעבד אירוע פרופיל באמצעות אוֹפְּצִיָה. ואז השתמשנו ב- אפשרות לאיסוף הדגימה למשך 30 שניות.

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

בואו ניצור את פלט ה- HTML בזמן שמעבד פרופילי יישום שלנו:

$ ./profiler.sh -e cpu -d 30 -f cpu_profile.html 66959

כאן אנו יכולים לראות כי פלט ה- HTML מאפשר לנו להרחיב, לכווץ ולחפש בדוגמאות.

בנוסף, פרופיל אסינק תומך בגרפי להבה מחוץ לקופסה.

בואו ניצור גרף להבה באמצעות ה- .svg סיומת קובץ לפרופיל המעבד של היישום שלנו:

$ ./profiler.sh -e cpu -d 30 -f cpu_profile.svg 66959

כאן, גרף הלהבה המתקבל מציג נתיבי קוד Java בירוק, C ++ בצהוב ונתיבי קוד מערכת באדום.

5. פרופיל הקצאה

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

פרופיל אסינק משתמש בטכניקת דגימה מבוססת TLAB (Thread Local Allocation Buffer) על מנת לאסוף את הדגימות של הקצאת הערימה מעל הגודל הממוצע של TLAB.

באמצעות להקצות אנו יכולים לאפשר לפרופילר לאסוף הקצאות ערימה של יישום הפרופיל שלנו:

$ ./profiler.sh -e alloc -d 30 -f alloc_profile.svg 66255

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

6. פרופיל שעון קיר

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

זה יכול להיות שימושי בעת פתרון בעיות בזמן הפעלת היישום.

על ידי הגדרת ה קִיר אירוע, אנו יכולים להגדיר את הפרופילר לאסוף דוגמאות מכל הנושאים:

$ ./profiler.sh -e wall -t -d 30 -f wall_clock_profile.svg 66959

כאן השתמשנו בפרופיל שעון הקיר במצב לכל חוט באמצעות ה- -t אפשרות, שמומלצת מאוד בעת פרופיל כל הנושאים.

בנוסף, אנו יכולים לבדוק את כל אירועי הפרופיל הנתמכים על ידי ה- JVM שלנו באמצעות ה- רשימה אוֹפְּצִיָה:

$ ./profiler.sh רשימה 66959
אירועים בסיסיים: מעבד הקצאת המנעול של קיר המנעול של שיטת Java: ClassName.methodName

7. פרופיל אסינק עם IntelliJ IDEA

IntelliJ IDEA כולל שילוב עם פרופיל אסינק ככלי פרופיל עבור Java.

7.1. תצורות פרופיל

אנחנו יכולים להגדיר פרופיל אסינק ב- IntelliJ IDEA על ידי בחירת ה- פרופיל Java אפשרות תפריט בשעה הגדרות / העדפות> בנייה, ביצוע, פריסה:

כמו כן, לשימוש מהיר, אנו יכולים לבחור בכל אחד מהם תצורה מוגדרת מראש, כמו פרופיל המעבד ופרופיל ההקצאה שמציעה IntelliJ IDEA.

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

7.2. יישום פרופיל באמצעות IntelliJ IDEA

ישנן כמה דרכים לנתח את היישום שלנו עם פרופיל.

למשל, אנו יכולים לבחור את היישום ולבחור לרוץ עם אוֹפְּצִיָה:

לחלופין, נוכל ללחוץ על סרגל הכלים ולבחור את לרוץ עם אוֹפְּצִיָה:

או, על ידי בחירת ה- לרוץ עם פרופילר אפשרות תחת לָרוּץ בתפריט, ואז בחר ב <שם תצורת פרופיל>:

בנוסף, אנו יכולים לראות את האפשרות צרף פרופיל לתהליך תחת לָרוּץ תַפרִיט. הוא פותח דו-שיח המאפשר לנו לבחור את התהליך לצרף:

לאחר שהיישום שלנו מוגדר, אנו יכולים לנתח את תוצאת הפרופיל באמצעות ה- מאפיין סרגל חלון כלים בתחתית IDE.

תוצאת הפרופיל של היישום שלנו תיראה כך:

הוא מציג את התוצאות החכמות בתבניות פלט שונות כמו גרפי להבה, עצי שיחות ורשימת שיטות.

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

8. מסקנה

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

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

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

אחרון, ערכנו יישום עם פרופיל אסינק באמצעות IntelliJ IDEA.


$config[zx-auto] not found$config[zx-overlay] not found