כלי שורת פקודה למציאת גודל הערימה של Java

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

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

2. jcmd

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

jcmd GC.heap_info

ראשית, בואו נמצא את מזהה התהליך של יישום Java מסוים באמצעות ה- jps פקודה:

$ jps -l 73170 org.jetbrains.idea.maven.server.RemoteMavenServer36 4309 quarkus.jar 12070 sun.tools.jps.Jps

כפי שמוצג לעיל, מזהה התהליך עבור אפליקציית Quarkus שלנו הוא 4309. כעת, כשיש לנו את מזהה התהליך, בואו נראה את מידע הערימה:

$ jcmd 4309 GC.heap_info 4309: ערימה ראשונה של אשפה 206848K, משומשת 43061K גודל אזור 1024K, 43 צעירים (44032K), 3 ניצולים (3072K) Metaspace משומש 12983K, קיבולת 13724K, התחייב 13824K, שמור 1060864K שטח בכיתה בשימוש 1599K, קיבולת 1740K, התחייב 1792K, שמור 1048576K

אפליקציה זו משתמשת באלגוריתם GC הראשון של G1:

  • השורה הראשונה מדווחת על גודל הערימה הנוכחי כ -202 מגה-בייט (206848 K) - כמו כן, נעשה שימוש ב -42 מגה-בייט (43061 K)
  • אזורי G1 הם 1 מגה בייט, ישנם 43 אזורים המסומנים כצעירים, ו -3 כמרחבים ניצולים
  • הקיבולת הנוכחית של מרחב המטאפס היא בסביבות 13.5 מגהבייט (13724 K). מאותו 13.5 מגהבייט, משתמשים בסביבות 12.5 מגהבייט (12983 K). כמו כן, נוכל להחזיק עד 1 ג'יגה-בתים של מטא-מרחב (1048576 K). יתר על כן, 13842 KB מובטח שיהיה זמין לשימוש במכונה הווירטואלית של ג'אווה, המכונה גם זיכרון מחויב
  • השורה האחרונה מראה כמה מהמטא-שטח משמש לאחסון מידע כיתתי

פלט זה עשוי להשתנות בהתאם לאלגוריתם GC. למשל, אם אנו מריצים את אותה אפליקציית Quarkus עם ZGC באמצעות "-XX: + UnlockExperimentalVMOptions -XX: + UseZGC":

ZHeap בשימוש 28M, קיבולת 200M, קיבולת מקסימלית 1024M Metaspace בשימוש 21031K, קיבולת 21241K, מחויב 21504K, שמור 22528K

כפי שמוצג לעיל, אנו משתמשים ב -28 מגה-בייט של הערימה ובסביבות 20 מגה-בייט של מטה-שטח. נכון לכתיבת שורות אלה, Intellij IDEA עדיין משתמשת ב- CMS GC עם מידע הערימה הבא:

סה"כ דור חדש 613440K, בשימוש 114299K עדן שטח 545344K, 18% בשימוש מהחלל 68096K, 16% בשימוש בחלל 68096K, 0% בשימוש במקביל סימון-מטאטא דור 1415616K, בשימוש 213479K Metaspace בשימוש 423107K, קיבולת 439976K, מחויב 440416K, שמורה 1429504K שטח בכיתה בשימוש 55889K, קיבולת 62488K, מחויב 62616K, שמור 1048576K

אנו יכולים לזהות את האופי הדורי הקלאסי של ה- CMS GC בתצורת הערימה.

3. jstat

בנוסף ל jcmd, אנחנו יכולים להשתמש jstat כדי לגלות את אותו מידע מריץ יישומים. למשל, אנו יכולים להשתמש jstat -gc כדי לראות נתונים סטטיסטיים של ערימה:

$ jstat -gc 4309 S0C S1C S0U S1U EC EU OC OU MC 0.0 0.0 0.0 0.0 129024.0 5120.0 75776.0 10134.6 20864.0 MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCTGCT 19946.2 2688.0 2355.0 2 0.007 1 0.020 0.

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

  • S0C - היכולת למרחב הניצולים הראשון
  • S1C - היכולת למרחב הניצולים השני
  • S0U - המרחב המשומש של הניצול הראשון
  • S1U - המרחב המשומש של השורד השני
  • EC - קיבולת שטח עדן
  • האיחוד האירופי - שטח משומש מעדן
  • OC - ​​יכולת דור ישן
  • OU - שטח משומש מהדור הישן
  • MC - קיבולת Metaspace
  • MU - שטח משומש מ- Metaspace
  • CCSC - קיבולת שטח דחוסה
  • CCSU - שטח משומש לשיעורים דחוסים
  • YGC - מספר GCs קלים
  • YGCT - הזמן המושקע עבור GCs קלים
  • FGC - מספר GCs המלא
  • FGCT - הזמן המושקע ל GCs מלא
  • CGC - מספר GCs במקביל
  • CGCT - זמן בילוי על GCs במקביל
  • GCT - זמן הבילוי לכל GCs

ישנן אפשרויות אחרות הקשורות לזיכרון עבור jstat כמו:

  • ה - קיבולת לדווח על יכולות שונות עבור אזורי זיכרון שונים
  • ה -גקוטיל מציג רק את אחוז הניצול של כל אזור
  • הסיבה זהה ל -גקוטיל אך מוסיף את הסיבה ל- GC האחרון ואולי לאירועי ה- GC הנוכחיים

4. טיעוני שורת פיקוד

אם אנו מריצים יישום Java עם אפשרויות תצורה של ערימה (לדוגמא, -Xms ו -Xmx), ואז יש עוד כמה טריקים כדי למצוא את הערכים שצוינו.

למשל, הנה איך jps מדווח על ערכים אלה:

$ jps -lv 4309 quarkus.jar -Xms200m -Xmx1g

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

בנוסף ל jps, כמה כלים אחרים ידווחו על אותו הדבר. לדוגמא, ה "Jcmd VM.command_line" ידווח גם על הפרטים הבאים:

$ jcmd 4309 VM.command_line 4309: ארגומנטים של VM: jvm_args: -Xms200m -Xmx1g java_command: quarkus.jar java_class_path (ראשוני): quarkus.jar סוג משגר: SUN_STANDARD

כמו כן, ברוב המערכות מבוססות יוניקס אנו יכולים להשתמש נ.ב מ ה אביזרים חֲבִילָה:

$ ps -ef | grep quarkus ... java -Xms200m -Xmx1g -jar quarkus.jar

לבסוף, ב- Linux, אנו יכולים להשתמש ב- / proc מערכת קבצים וירטואלית וקבצי ה- pid שלה:

$ cat / proc / 4309 / cmdline java -Xms200m -Xmx1g -jar quarkus.jar

ה cmdline הקובץ, בספריה על שם ה- Quarkus pid, מכיל את שורת הפקודה עבור היישום.

5. מסקנה

במדריך מהיר זה ראינו כמה דרכים שונות להשיג את גודל הערימה של יישום Java פועל.


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