Overvåking av diskbruk og andre beregninger i Java

1. Oversikt

I denne raske opplæringen vil vi diskutere hvordan du kan overvåke viktige beregninger i Java. Vi vil fokusere på diskplass, minnebruk og tråddata - bare ved hjelp av kjerneprogram-Java-APIer.

I vårt første eksempel bruker vi Fil klasse for å spørre om spesifikk diskinformasjon.

Deretter analyserer vi minnebruk og prosessorinformasjon ved å dykke ned i ManagementFactory klasse.

Til slutt vil vi ta på hvordan du overvåker disse viktige beregningene ved kjøretid ved hjelp av Java Profilers.

2. Introduksjon til Fil Klasse

Enkelt sagt, den Fil klasse representerer en abstraksjon av en fil eller katalog. Det kan brukes til få nøkkelinformasjon om filsystemet og vedlikeholdeOS-uavhengighet angående filstier. I denne opplæringen bruker vi denne klassen til å undersøke rotpartisjoner på både Windows- og Linux-maskiner.

3. ManagementFactory

Java tilbyr ManagementFactory klasse som en fabrikk for å få administrerte bønner (MXBeans) inneholderspesifikk informasjon om JVM. Vi vil undersøke to i følgende kodeeksempler:

3.1. MemoryMXBean

De MemoryMXBean representerer administrasjonsgrensesnittet for minnesystemet til JVM. På kjøretid oppretter JVM en enkelt forekomst av dette grensesnittet som vi kan hente ved hjelp av ManagementFactory‘S getMemoryMXBean () metode.

3.2. ThreadMXBean

På samme måte som MemoryMXBean, ThreadMXBean er administrasjonsgrensesnittet for trådsystemet til JVM. Det kan kalles ved hjelp av getThreadMXBean () metode og har nøkkeldata angående tråder.

I de følgende eksemplene bruker vi ThreadMXBean for å få tak i JVM-ene ThreadInfo klasse - som inneholder spesifikk informasjon om tråder som kjører på JVM.

3. Overvåke diskbruk

I dette kodeeksemplet bruker vi filklassen til å inneholde nøkkelinformasjon om partisjoner. Følgende eksempel returnerer ledig, total og tilgjengelig plass fra C: -stasjonen på en Windows-maskin:

Fil cDrive = ny fil ("C:"); System.out.println (String.format ("Total plass:% .2f GB", (dobbel) cDrive.getTotalSpace () / 1073741824)); System.out.println (String.format ("Ledig plass:% .2f GB", (dobbel) cDrive.getFreeSpace () / 1073741824)); System.out.println (String.format ("Brukbar plass:% .2f GB", (dobbel) cDrive.getUsableSpace () / 1073741824)); 

På samme måte kan vi returnere den samme informasjonen for rotkatalog på en Linux-maskin:

File root = new File ("/"); System.out.println (String.format ("Total plass:% .2f GB", (dobbel) root.getTotalSpace () / 1073741824)); System.out.println (String.format ("Ledig plass:% .2f GB", (dobbel) root.getFreeSpace () / 1073741824)); System.out.println (String.format ("Brukbar plass:% .2f GB", (dobbel) root.getUsableSpace () / 1073741824)); 

Ovennevnte kode skriver ut den totale, ledige og brukbare plassen for den definerte filen. Som standard gir metodene ovenfor antall byte. Vi har konvertert disse bytene til gigabyte for å gjøre resultatet mye mer menneskelig lesbart.

4. Overvåke minnebruk

Vi bruker nåManagementFactory klasse tilspørre minnet som er tilgjengelig for JVM ved å ringe MemoryMXBean.

I dette eksemplet vil vi først og fremst fokusere på å spørre om heapminne. Det er viktig å merke seg at ikke-heap-minne også kan spørres ved hjelp av MemoryMXBean:

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean (); System.out.println (String.format ("Initial memory:% .2f GB", (double) memoryMXBean.getHeapMemoryUsage (). GetInit () / 1073741824)); System.out.println (String.format ("Brukt heapminne:% .2f GB", (dobbelt) memoryMXBean.getHeapMemoryUsage (). GetUsed () / 1073741824)); System.out.println (String.format ("Max heap memory:% .2f GB", (double) memoryMXBean.getHeapMemoryUsage (). GetMax () / 1073741824)); System.out.println (String.format ("Committed memory:% .2f GB", (double) memoryMXBean.getHeapMemoryUsage (). GetCommitted () / 1073741824)); 

Ovennevnte eksempel returnerer henholdsvis det opprinnelige, brukte, maksimale og forpliktede minnet. Her er en kort forklaring på hva det betyr:

  • Innledende: Første minne JVM ber om fra operativsystemet under oppstart
  • Brukt: Den nåværende mengden minne som brukes av JVM
  • Maks: Maksimum minne tilgjengelig for JVM. Hvis denne grensen er nådd en OutOfMemoryException kan kastes
  • Forpliktet: Mengden minne garantert å være tilgjengelig for JVM

5. CPU-bruk

Deretter bruker vi ThreadMXBean for å få en omfattende liste over ThreadInfo gjenstander og spørre dem for å fånyttig informasjon angåendenåværende tråder kjører på JVM.

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean (); for (Long threadID: threadMXBean.getAllThreadIds ()) {ThreadInfo info = threadMXBean.getThreadInfo (threadID); System.out.println ("Trådnavn:" + info.getThreadName ()); System.out.println ("Trådtilstand:" + info.getThreadState ()); System.out.println (String.format ("CPU-tid:% s ns", threadMXBean.getThreadCpuTime (threadID))); } 

For det første får koden en liste over gjeldende tråder ved hjelp av getAllThreadIds metode. For hver tråd sender den deretter navnet og tilstanden til tråden etterfulgt av CPU-tiden for tråden i nanosekunder.

6. Overvåking av beregninger ved bruk av profiler

Til slutt er det verdt å nevne det vi kan overvåke disse viktige beregningene uten å bruke Java-kode. Java Profilers overvåker nøye nøkkelkonstruksjoner og operasjoner på JVM-nivå og tilbyr sanntidsanalyse av minne, tråder og mer.

VisualVM er et slikt eksempel på en Java-profil og har blitt pakket med JDK siden Java 6. Mange integrerte utviklingsmiljøer (IDE) inneholder plugins for å utnytte profilere mens de utvikler ny kode. Du kan lære mer om Java Profilers og VisualVM her.

7. Konklusjon

I denne artikkelen har vi berørt bruk av Java-APIer for å spørre om nøkkelinformasjon om diskbruk, minneadministrasjon og trådinformasjon.

Vi har sett på flere eksempler på bruk av Fil og ManagmentFactory klasser for å oppnå disse beregningene.


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