Praćenje upotrebe diska i drugih mjernih podataka u Javi
1. Pregled
U ovom brzom vodiču razgovarat ćemo o tome kako nadzirati ključne metrike u Javi. Usredotočit ćemo se na prostor na disku, upotreba memorije i podaci niti - koristeći samo osnovne Java API-je.
U našem prvom primjeru koristit ćemo Datoteka klasa za upit određenih podataka o disku.
Zatim ćemo analizirati upotrebu memorije i podatke o procesoru zaranjajući u Tvornica upravljanja razred.
Napokon ćemo se dotaknuti kako nadzirati ove ključne mjerne podatke tijekom izvođenja koristeći Java Profilers.
2. Uvod u Datoteka Razred
Jednostavno rečeno, Datoteka klasa predstavlja apstrakciju datoteke ili direktorij. Može se koristiti za dobiti ključne informacije o datotečnom sustavu i održavatiNeovisnost OS-a u vezi s putanjama datoteka. U ovom uputstvu koristit ćemo ovu klasu za ispitivanje root particija na Windows i Linux računalima.
3. Tvornica upravljanja
Java nudi Tvornica upravljanja razreda kao tvornica za dobivanje upravljanog graha (MXBeans) koji sadržespecifične informacije o JVM-u. Dvoje ćemo ispitati u sljedećim primjerima koda:
3.1. MemoryMXBean
The MemoryMXBean predstavlja sučelje za upravljanje za memorijski sustav JVM-a. Tijekom izvođenja, JVM stvara jednu instancu ovog sučelja koju možemo dohvatiti pomoću Tvornica upravljanja‘S getMemoryMXBean () metoda.
3.2. ThreadMXBean
Slično kao MemoryMXBean, ThreadMXBean je upravljačko sučelje za sustav niti JVM-a. To se može nazvati pomoću getThreadMXBean () metoda i sadrži ključne podatke u vezi s nitima.
U sljedećim primjerima koristit ćemo ThreadMXBean kako bi se dočepali JVM-a ThreadInfo klasa - koja sadrži specifične informacije o nitima pokrenutim na JVM-u.
3. Nadgledanje upotrebe diska
U ovom primjeru koda koristit ćemo klasu File da bismo sadržavali ključne informacije o particijama. Sljedeći će primjer vratiti slobodan, ukupan i dostupan prostor s pogona C: na Windows računalu:
Datoteka cDrive = nova datoteka ("C:"); System.out.println (String.format ("Ukupni prostor:% .2f GB", (dvostruki) cDrive.getTotalSpace () / 1073741824)); System.out.println (String.format ("Slobodan prostor:% .2f GB", (dvostruko) cDrive.getFreeSpace () / 1073741824)); System.out.println (String.format ("Korisni prostor:% .2f GB", (dvostruki) cDrive.getUsableSpace () / 1073741824));
Slično tome, možemo vratiti iste podatke za korijenski direktorij Linux stroja:
Korijen datoteke = nova datoteka ("/"); System.out.println (String.format ("Ukupni prostor:% .2f GB", (dvostruki) root.getTotalSpace () / 1073741824)); System.out.println (String.format ("Slobodan prostor:% .2f GB", (dvostruki) root.getFreeSpace () / 1073741824)); System.out.println (String.format ("Korisni prostor:% .2f GB", (dvostruki) root.getUsableSpace () / 1073741824));
Gornji kod ispisuje ukupan, besplatan i korisni prostor za definiranu datoteku. Prema zadanim postavkama, gore navedene metode daju broj bajtova. Pretvorili smo ove bajtove u gigabajte kako bismo rezultat učinili mnogo čitljivijim.
4. Praćenje upotrebe memorije
Sad ćemo koristitiTvornica upravljanja razred doupitajte memoriju koja je dostupna JVM-u pozivajući MemoryMXBean.
U ovom ćemo se primjeru prvenstveno usredotočiti na ispitivanje hrpe memorije. Važno je napomenuti da se memorija koja ne sadrži hrpu također može pitati pomoću MemoryMXBean:
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean (); System.out.println (String.format ("Početna memorija:% .2f GB", (dvostruka) memoryMXBean.getHeapMemoryUsage (). GetInit () / 1073741824)); System.out.println (String.format ("Korištena memorija hrpe:% .2f GB", (dvostruka) memoryMXBean.getHeapMemoryUsage (). GetUsed () / 1073741824)); System.out.println (String.format ("Max memorija hrpe:% .2f GB", (dvostruka) memoryMXBean.getHeapMemoryUsage (). GetMax () / 1073741824)); System.out.println (String.format ("Posvećena memorija:% .2f GB", (dvostruka) memoryMXBean.getHeapMemoryUsage (). GetCommitted () / 1073741824));
Gornji primjer vraća početnu, korištenu, maksimalnu i dodijeljenu memoriju. Evo kratkog objašnjenja što to znači:
- Inicijalno: Inicijalna memorija koju JVM zahtijeva od OS-a tijekom pokretanja
- Korišteno: trenutna količina memorije koju koristi JVM
- Max: Maksimalna memorija dostupna JVM-u. Ako se dosegne ovo ograničenje OutOfMemoryException može biti bačen
- Predano: Zajamčena količina memorije dostupna JVM-u
5. Korištenje CPU-a
Dalje ćemo koristiti ThreadMXBean dobiti sveobuhvatan popis ThreadInfo predmeti i pitajte ih da steknukorisne informacije u vezi strenutne niti trčanje na JVM-u.
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean (); for (Long threadID: threadMXBean.getAllThreadIds ()) {ThreadInfo info = threadMXBean.getThreadInfo (threadID); System.out.println ("Naziv teme:" + info.getThreadName ()); System.out.println ("Stanje niti:" + info.getThreadState ()); System.out.println (String.format ("CPU vrijeme:% s ns", threadMXBean.getThreadCpuTime (threadID))); }
Prvo, kod dobiva popis trenutnih niti pomoću getAllThreadIds metoda. Za svaku nit tada izbacuje ime i stanje niti nakon čega slijedi procesorsko vrijeme niti u nanosekundama.
6. Praćenje metrike pomoću profilara
Napokon, vrijedi to spomenuti te ključne mjerne podatke možemo nadzirati bez upotrebe Java koda. Java Profileri pomno prate ključne konstrukcije i operacije na razini JVM-a i nude analizu memorije, niti i još mnogo toga u stvarnom vremenu.
VisualVM je jedan od takvih primjera Java Profilera i u paketu je s JDK od Jave 6. Mnoga integrirana razvojna okruženja (IDE) sadrže dodatke koji koriste profilere tijekom razvijanja novog koda. Ovdje možete saznati više o Java Profilers i VisualVM.
7. Zaključak
U ovom smo članku dotaknuli upotrebu jezgre Java API-ja za postavljanje upita o ključnim informacijama o upotrebi diska, upravljanju memorijom i informacijama o nitima.
Pregledali smo više primjera korištenja Datoteka i ManagmentFactory razreda za dobivanje ovih mjernih podataka.