Chciałbym monitorować następujące informacje systemowe w Javie:
- Bieżące użycie procesora ** (procent)
- Dostępna pamięć * (wolna / całkowita)
Dostępne miejsce na dysku (wolne / ogółem)
* Pamiętaj, że mam na myśli ogólną pamięć dostępną dla całego systemu, a nie tylko JVM.
Szukam rozwiązania wieloplatformowego (Linux, Mac i Windows), który nie będzie polegał na moim własnym kodzie wywołującym programy zewnętrzne lub używającym JNI. Chociaż są to realne opcje, wolałbym nie utrzymywać kodu specyficznego dla systemu operacyjnego, jeśli ktoś ma już lepsze rozwiązanie.
Jeśli dostępna jest darmowa biblioteka, która robi to w niezawodny sposób na wiele platform, byłoby świetnie (nawet jeśli wykonuje zewnętrzne wywołania lub sam kod macierzysty).
Wszelkie sugestie są mile widziane.
Aby to wyjaśnić, chciałbym uzyskać bieżące wykorzystanie procesora dla całego systemu, a nie tylko dla procesów Java.
Interfejs API SIGAR zapewnia wszystkie funkcje, których szukam w jednym pakiecie, więc jest to najlepsza jak dotąd odpowiedź na moje pytanie. Ponieważ jednak jest licencjonowany na licencji GPL, nie mogę go używać do moich pierwotnych celów (zamknięty produkt komercyjny). Możliwe, że Hyperic może licencjonować SIGAR do użytku komercyjnego, ale nie analizowałem tego. W przypadku moich projektów GPL zdecydowanie rozważę SIGAR w przyszłości.
Na moje obecne potrzeby skłaniam się w kierunku:
- Do wykorzystania procesora
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(średnie obciążenie na procesor) - Dla pamięci
OperatingSystemMXBean.getTotalPhysicalMemorySize()
iOperatingSystemMXBean.getFreePhysicalMemorySize()
- Dla miejsca na dysku
File.getTotalSpace()
iFile.getUsableSpace()
Ograniczenia:
getSystemLoadAverage()
I przestrzeń dysku metody wysyłania zapytań są dostępne tylko w języku Java 6. Ponadto niektóre funkcje JMX nie mogą być dostępne dla wszystkich platform (czyli to doniesienia, że getSystemLoadAverage()
wraca -1 w Windows).
Chociaż pierwotnie licencjonowany na licencji GPL, został zmieniony na Apache 2.0 , który ogólnie może być używany do zamkniętych produktów komercyjnych.