Monitorovanie používania disku a ďalších metrík v Jave

1. Prehľad

V tomto rýchlom výučbe budeme diskutovať o tom, ako sledovať kľúčové metriky v Jave. Zameriame sa na miesto na disku, využitie pamäte a dáta vlákien - používajú sa iba základné Java API.

V našom prvom príklade použijeme Súbor triedy na dopytovanie konkrétnych informácií o disku.

Potom budeme analyzovať využitie pamäte a informácie o procesore ponorením do ManagementFactory trieda.

Nakoniec sa dotkneme ako monitorovať tieto kľúčové metriky za behu pomocou Java Profilers.

2. Úvod do Súbor Trieda

Jednoducho povedané Súbor trieda predstavuje abstrakciu súboru alebo adresár. Dá sa na to zvyknúť získať kľúčové informácie o súborovom systéme a udržiavať ichNezávislosť OS ohľadne ciest k súborom. V tomto tutoriáli budeme túto triedu používať na skúmanie koreňových oddielov na počítačoch Windows aj Linux.

3. ManagementFactory

Java poskytuje ManagementFactory triedy ako továreň na získavanie riadených fazúľ (MXBeans) obsahujúcekonkrétne informácie o JVM. Skúmame dva v nasledujúcich príkladoch kódu:

3.1. MemoryMXBean

The MemoryMXBean predstavuje rozhranie pre správu pre pamäťový systém JVM. Za behu JVM vytvorí jednu inštanciu tohto rozhrania, ktorú môžeme načítať pomocou ManagementFactory‘S getMemoryMXBean () metóda.

3.2. ThreadMXBean

Podobne ako MemoryMXBean, ThreadMXBean je rozhranie pre správu pre systém vlákien JVM. Dá sa to nazvať pomocou getThreadMXBean () metóda a uchováva kľúčové údaje týkajúce sa vlákien.

V nasledujúcich príkladoch budeme používať ThreadMXBean aby sme dostali do rúk JVM ThreadInfo trieda - ktorá obsahuje konkrétne informácie týkajúce sa vlákien bežiacich na JVM.

3. Monitorovanie používania disku

V tomto príklade kódu použijeme triedu File na uloženie kľúčových informácií o oddieloch. Nasledujúci príklad vráti voľné, celkové a dostupné miesto z jednotky C: na počítači so systémom Windows:

Súbor cDrive = nový súbor ("C:"); System.out.println (String.format ("Celkový priestor:% .2f GB", (double) cDrive.getTotalSpace () / 1073741824)); System.out.println (String.format ("Voľné miesto:% .2f GB", (dvojité) cDrive.getFreeSpace () / 1073741824)); System.out.println (String.format ("Využiteľný priestor:% .2f GB", (double) cDrive.getUsableSpace () / 1073741824)); 

Podobne môžeme vrátiť rovnaké informácie pre server koreňový adresár stroja so systémom Linux:

Root súboru = nový súbor ("/"); System.out.println (String.format ("Celkový priestor:% .2f GB", (dvojitý) root.getTotalSpace () / 1073741824))); System.out.println (String.format ("Voľné miesto:% .2f GB", (double) root.getFreeSpace () / 1073741824)); System.out.println (String.format ("Využiteľný priestor:% .2f GB", (dvojitý) root.getUsableSpace () / 1073741824))); 

Vyššie uvedený kód vytlačí celkový, voľný a využiteľný priestor pre definovaný súbor. V predvolenom nastavení poskytujú vyššie uvedené metódy počet bajtov. Tieto byty sme previedli na gigabajty, aby bol výsledok oveľa čitateľnejší pre človeka.

4. Monitorovanie využitia pamäte

Teraz použijemeManagementFactory trieda dovyhľadať pamäť dostupnú pre JVM zavolaním na MemoryMXBean.

V tomto príklade sa zameriame predovšetkým na dopytovanie haldy pamäte. Je dôležité si uvedomiť, že nehaldovú pamäť je tiež možné vyhľadať pomocou MemoryMXBean:

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean (); System.out.println (String.format ("Počiatočná pamäť:% .2f GB", (dvojnásobok) memoryMXBean.getHeapMemoryUsage (). GetInit () / 1073741824)); System.out.println (String.format ("Použitá halda pamäte:% .2f GB", (dvojnásobok) memoryMXBean.getHeapMemoryUsage (). GetUsed () / 1073741824)); System.out.println (String.format ("Max. Halda pamäte:% .2f GB", (dvojnásobok) memoryMXBean.getHeapMemoryUsage (). GetMax () / 1073741824)); System.out.println (String.format ("Committed memory:% .2f GB", (double) memoryMXBean.getHeapMemoryUsage (). GetCommit () / 1073741824)); 

Vyššie uvedený príklad vráti počiatočnú, použitú, maximálnu a potvrdenú pamäť. Tu je krátke vysvetlenie, čo to znamená:

  • Initial: Počiatočná pamäť, ktorú JVM požaduje od OS počas spustenia
  • Použité: Aktuálne množstvo pamäte, ktoré používa JVM
  • Max: Maximálna pamäť dostupná pre JVM. Ak sa tento limit dosiahne, OutOfMemoryException môže byť vyhodený
  • Potvrdené: Množstvo pamäte, ktorá je zaručene dostupná pre JVM

5. Využitie procesora

Ďalej použijeme ThreadMXBean získať komplexný zoznam ThreadInfo predmety a dopytujte sa ich, aby ste získaliužitočné informácie týkajúce saaktuálne vlákna beží na JVM.

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean (); pre (Dlhé ID vlákna: threadMXBean.getAllThreadIds ()) {ThreadInfo info = threadMXBean.getThreadInfo (threadID); System.out.println ("Názov vlákna:" + info.getThreadName ()); System.out.println ("Stav vlákna:" + info.getThreadState ()); System.out.println (String.format ("čas CPU:% s ns", threadMXBean.getThreadCpuTime (threadID)))); } 

Po prvé, kód získa zoznam aktuálnych vlákien pomocou getAllThreadIds metóda. Pre každé vlákno potom vydá názov a stav vlákna, za ktorým nasleduje čas CPU pre vlákno v nanosekundách.

6. Monitorovanie metrík pomocou profilerov

Na záver stojí za zmienku môžeme tieto kľúčové metriky monitorovať bez použitia kódu Java. Programy Java Profilers pozorne sledujú kľúčové konštrukcie a operácie na úrovni JVM a ponúkajú analýzu pamäte, vlákien a ďalšie v reálnom čase.

VisualVM je jedným z príkladov profilovača Java a je dodávaný s balíkom JDK od verzie Java 6. Mnoho integrovaných vývojových prostredí (IDE) obsahuje doplnky, ktoré využívajú profilovače pri vývoji nového kódu. Viac informácií o profiloch Java a VisualVM sa dozviete tu.

7. Záver

V tomto článku sme sa dotkli používania základných rozhraní Java API na zisťovanie kľúčových informácií o využití disku, správe pamäte a informáciách o vláknach.

Pozreli sme sa na niekoľko príkladov použitia Súbor a ManagmentFactory triedy na získanie týchto metrík.


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