ניטור השימוש בדיסקים וערכים אחרים ב- Java

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

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

בדוגמה הראשונה שלנו, נשתמש ב- קוֹבֶץ בכיתה לשאילת מידע על דיסק ספציפי.

לאחר מכן ננתח את השימוש בזיכרון ומידע על המעבד על ידי צלילה אל ה- ניהול מפעל מעמד.

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

2. מבוא ל קוֹבֶץ מעמד

במילים פשוטות, ה קוֹבֶץ class מייצג הפשטה של ​​קובץ או ספריה. אפשר להשתמש בזה להשיג מידע מרכזי על מערכת הקבצים ולתחזקעצמאות מערכת ההפעלה לגבי נתיבי קבצים. במדריך זה נשתמש בכיתה זו לבחינת מחיצות שורש הן במכונות Windows והן בלינוקס.

3. ניהול מפעל

Java מספקת את ניהול מפעל בכיתה כמפעל להשגת שעועית מנוהלת (MXBeans) מֵכִילמידע ספציפי על ה- JVM. נבחן שתיים בדוגמאות הקוד הבאות:

3.1. MemoryMXBean

ה MemoryMXBean מייצג את ממשק הניהול למערכת הזיכרון של ה- JVM. בזמן ריצה, ה- JVM יוצר מופע יחיד של ממשק זה אותו נוכל לאחזר באמצעות ה- ניהול מפעלשל getMemoryMXBean () שיטה.

3.2. ThreadMXBean

דומה ל MemoryMXBean, ThreadMXBean הוא ממשק הניהול של מערכת ההברגה של ה- JVM. ניתן לקרוא לזה באמצעות getThreadMXBean () שיטה ומחזיקה נתוני מפתח בנוגע לשרשורים.

בדוגמאות הבאות נשתמש ב- ThreadMXBean לשים את ידינו על מכוניות ה- JVM ThreadInfo class - המכיל מידע ספציפי בנוגע לשרשורים הפועלים ב- JVM.

3. ניטור השימוש בדיסק

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

קובץ cDrive = קובץ חדש ("C:"); System.out.println (String.format ("שטח כולל:% .2f GB", (כפול) cDrive.getTotalSpace () / 1073741824)); System.out.println (String.format ("שטח פנוי:% .2f GB", (כפול) cDrive.getFreeSpace () / 1073741824)); System.out.println (String.format ("שטח שמיש:% .2f GB", (כפול) cDrive.getUsableSpace () / 1073741824)); 

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

שורש הקובץ = קובץ חדש ("/"); System.out.println (String.format ("שטח כולל:% .2f GB", (כפול) root.getTotalSpace () / 1073741824)); System.out.println (String.format ("שטח פנוי:% .2f GB", (כפול) root.getFreeSpace () / 1073741824)); System.out.println (String.format ("שטח שמיש:% .2f GB", (כפול) root.getUsableSpace () / 1073741824)); 

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

4. ניטור השימוש בזיכרון

כעת נשתמש ב-ניהול מפעל כיתה לשאילתה את הזיכרון הזמין ל- JVM על ידי התקשרות ל- MemoryMXBean.

בדוגמה זו נתמקד בעיקר בשאילתת זיכרון ערימה. חשוב לציין כי ניתן לשאול באמצעות זיכרון גם זיכרון שאינו ערימה MemoryMXBean:

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean (); System.out.println (String.format ("זיכרון ראשוני:% .2f GB", (כפול) memoryMXBean.getHeapMemoryUsage (). GetInit () / 1073741824)); System.out.println (String.format ("זיכרון ערימה משומש:% .2f GB", (כפול) memoryMXBean.getHeapMemoryUsage (). GetUsed () / 1073741824)); System.out.println (String.format ("זיכרון ערימה מרבי:% .2f GB", (כפול) זיכרון MXBean.getHeapMemoryUsage (). GetMax () / 1073741824)); System.out.println (String.format ("זיכרון מחויב:% .2f GB", (כפול) memoryMXBean.getHeapMemoryUsage (). GetCommitted () / 1073741824)); 

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

  • ראשוני: זיכרון ראשוני ש- JVM מבקש ממערכת ההפעלה במהלך ההפעלה
  • בשימוש: כמות הזיכרון הנוכחית המשמשת את ה- JVM
  • מקסימום: הזיכרון המרבי הזמין ל- JVM. אם הגבלה זו מגיעה ל- OutOfMemoryException עלול להיזרק
  • מחויב: כמות הזיכרון המובטחת להיות זמינה ל- JVM

5. שימוש במעבד

לאחר מכן נשתמש ב- ThreadMXBean כדי להשיג רשימה מקיפה של ThreadInfo חפצים ו תשאלי אותם להרוויחמידע שימושי לגביהאשכולות הנוכחיים פועל ב- JVM.

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean (); עבור (Long threadID: threadMXBean.getAllThreadIds ()) {ThreadInfo info = threadMXBean.getThreadInfo (threadID); System.out.println ("שם החוט:" + info.getThreadName ()); System.out.println ("מצב חוט:" + info.getThreadState ()); System.out.println (String.format ("זמן מעבד:% s ns", threadMXBean.getThreadCpuTime (threadID))); } 

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

6. מעקב אחר מדדים באמצעות פרופילים

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

VisualVM הוא דוגמה אחת כזו לפרופיל Java, והוא צובר עם JDK מאז Java 6. סביבות פיתוח משולבות רבות (IDE) מכילות תוספים למינוף פרופילים תוך פיתוח קוד חדש. תוכל ללמוד עוד על פרופילי Java ו- VisualVM כאן.

7. מסקנה

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

בדקנו מספר דוגמאות לשימוש ב- קוֹבֶץ ו ManagmentFactory שיעורים להשגת מדדים אלה.


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