Lemezhasználat és egyéb mutatók figyelése a Java-ban

1. Áttekintés

Ebben a gyors bemutatóban megvitatjuk, hogyan lehet figyelni a Java legfontosabb mutatóit. Összpontosítunk lemezterület, memóriahasználat és száladatok - csak az alapvető Java API-k használatával.

Első példánkban a File osztály, hogy lekérdezzen egy adott lemezt.

Ezután elemezzük a memóriahasználatot és a processzor adatait azáltal, hogy belemerülünk a ManagementFactory osztály.

Végül érintjük hogyan lehet ezeket a kulcsfontosságú mutatókat futás közben figyelni a Java Profiler segítségével.

2. Bevezetés a File Osztály

Egyszerűen fogalmazva: File osztály egy fájl absztrakcióját képviseli vagy könyvtár. Meg lehet szokni kulcsfontosságú információk beszerzése a fájlrendszerről és karbantartásAz operációs rendszer függetlensége a fájl elérési útjaival kapcsolatban. Ebben az oktatóanyagban ezt az osztályt fogjuk használni a root partíciók vizsgálatára mind a Windows, mind a Linux gépeken.

3. ManagementFactory

A Java biztosítja a ManagementFactory osztály, mint gyár kezelt babok beszerzésére (MXBeans) tartalmazókonkrét információk a JVM-ről. Az alábbi kódpéldák közül kettőt vizsgálunk meg:

3.1. MemóriaMXBean

A A MemoryMXBean képviseli a kezelőfelületet a JVM memóriarendszeréhez. Futásidejűleg a JVM ennek az interfésznek egyetlen példányát hozza létre, amelyet a ManagementFactory’S getMemoryMXBean () módszer.

3.2. ThreadMXBean

Hasonlóan MemóriaMXBean, ThreadMXBean a JVM szálrendszerének kezelőfelülete. A. Segítségével hívható getThreadMXBean () metódus és a szálakkal kapcsolatos kulcsadatokat tárolja.

A következő példákban a ThreadMXBean hogy a kezünkbe vegyük a JVM-eket ThreadInfo osztály - amely konkrét információkat tartalmaz a JVM-en futó szálakról.

3. A lemez használatának figyelése

Ebben a kód példában a Fájl osztály használatával kulcsfontosságú információkat tartalmazunk a partíciókról. Az alábbi példa a C, meghajtó szabad, teljes és rendelkezésre álló területét adja vissza egy Windows gépen:

CDrive fájl = új fájl ("C:"); System.out.println (String.format ("Teljes hely:% .2f GB", (dupla) cDrive.getTotalSpace () / 1073741824)); System.out.println (String.format ("Szabad hely:% .2f GB", (dupla) cDrive.getFreeSpace () / 1073741824)); System.out.println (String.format ("Hasznos terület:% .2f GB", (dupla) cDrive.getUsableSpace () / 1073741824)); 

Hasonlóképpen visszaadhatjuk ugyanazt az információt a Linux gép gyökérkönyvtára:

File root = new File ("/"); System.out.println (String.format ("Teljes terület:% .2f GB", (dupla) root.getTotalSpace () / 1073741824)); System.out.println (String.format ("Szabad hely:% .2f GB", (dupla) root.getFreeSpace () / 1073741824)); System.out.println (String.format ("Hasznos terület:% .2f GB", (dupla) root.getUsableSpace () / 1073741824)); 

A fenti kód kinyomtatja a megadott fájl teljes, szabad és használható területét. Alapértelmezés szerint a fenti módszerek megadják a bájtok számát. Ezeket a bájtokat gigabájtokká alakítottuk át, hogy az eredmény sokkal emberileg olvashatóbb legyen.

4. A memóriahasználat figyelése

Most használjuk aManagementFactory osztálybalekérdezi a JVM rendelkezésére álló memóriát a MemóriaMXBean.

Ebben a példában elsősorban a halom memória lekérdezésére fogunk összpontosítani. Fontos megjegyezni, hogy a nem kupacos memória is lekérdezhető MemoryMXBean:

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean (); System.out.println (String.format ("Kezdeti memória:% .2f GB", (kettős) memóriaMXBean.getHeapMemoryUsage (). GetInit () / 1073741824)); System.out.println (String.format ("Használt kupac memória:% .2f GB", (dupla) memoryMXBean.getHeapMemoryUsage (). GetUsed () / 1073741824)); System.out.println (String.format ("Max halom memória:% .2f GB", (dupla) memoryMXBean.getHeapMemoryUsage (). GetMax () / 1073741824)); System.out.println (String.format ("Elkötelezett memória:% .2f GB", (kettős) memóriaMXBean.getHeapMemoryUsage (). GetCommitted () / 1073741824)); 

A fenti példa visszaadja a kezdeti, használt, max és lekötött memóriát. Itt van egy rövid magyarázat arra, hogy ez mit jelent:

  • Kezdeti: Kezdeti memória, amelyet a JVM indításkor kér az operációs rendszertől
  • Használt: A JVM által használt memória aktuális mennyisége
  • Max: A JVM számára elérhető maximális memória. Ha ezt a határt eléri egy OutOfMemoryException lehet dobni
  • Elkötelezett: A JVM számára garantáltan rendelkezésre álló memóriamennyiség

5. CPU használat

Ezután a ThreadMXBean hogy átfogó listát nyerjünk ThreadInfo tárgyak és lekérdezni őket, hogy megszerezzékhasznos információk ajelenlegi szálak fut a JVM-en.

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean (); for (Hosszú szálazonosító: threadMXBean.getAllThreadIds ()) {ThreadInfo info = threadMXBean.getThreadInfo (threadID); System.out.println ("Szál neve:" + info.getThreadName ()); System.out.println ("Menetállapot:" + info.getThreadState ()); System.out.println (String.format ("CPU idő:% s ns", threadMXBean.getThreadCpuTime (threadID))); } 

Először is, a kód megkapja az aktuális szálak listáját a getAllThreadIds módszer. Ezután mindegyik szálhoz megadja a szál nevét és állapotát, majd a szál CPU-idejét nanoszekundumban.

6. A mérőszámok figyelése a profilkészítők segítségével

Végül érdemes megemlíteni ezt ezeket a legfontosabb mutatókat Java kód használata nélkül is figyelemmel kísérhetjük. A Java Profilers szorosan figyelemmel kíséri a JVM szintjén a legfontosabb konstrukciókat és műveleteket, és valós idejű elemzést kínál a memóriáról, a szálakról és egyebekről.

A VisualVM egy ilyen példa a Java profilozóra, és a Java 6 óta a JDK-val van együtt. Számos integrált fejlesztői környezet (IDE) tartalmaz beépülő modulokat a profilalkotók kihasználására, miközben új kódot fejlesztenek. Itt többet megtudhat a Java Profiler-ről és a VisualVM-ről.

7. Következtetés

Ebben a cikkben megérintettük az alapvető Java API-k használatát a lemezhasználattal, a memóriakezeléssel és a szálinformációval kapcsolatos kulcsinformációk lekérdezéséhez.

Több példát is megvizsgáltunk a File és ManagmentFactory osztályokat ezeknek a mutatóknak a megszerzéséhez.