Java'da aşağıdaki sistem bilgilerini izlemek istiyorum:
- Geçerli CPU kullanımı ** (yüzde)
- Kullanılabilir bellek * (boş / toplam)
Kullanılabilir disk alanı (boş / toplam)
* Sadece JVM için değil, tüm sistem için kullanılabilir toplam bellek anlamına geldiğimi unutmayın.
Harici programları çağıran veya JNI kullanan kendi koduma dayanmayan bir platformlar arası çözüm (Linux, Mac ve Windows) arıyorum. Bunlar uygulanabilir seçenekler olmasına rağmen, birisinin zaten daha iyi bir çözümü varsa, işletim sistemine özgü kodu kendim korumamayı tercih ederim.
Dışarıda bunu güvenilir, platformlar arası bir şekilde yapan ücretsiz bir kütüphane varsa, bu harika olurdu (harici aramalar yapsa veya yerel kod kullansa bile).
Herhangi bir öneriniz çok takdir edilmektedir.
Açıklığa kavuşturmak için, sadece Java işlem (ler) i değil, tüm sistem için geçerli CPU kullanımını almak istiyorum.
SIGAR API, aradığım tüm işlevleri tek bir pakette sunar, bu yüzden şu ana kadar sorumun en iyi yanıtıdır. Ancak, GPL kapsamında lisanslandığı için, orijinal amacım (kapalı kaynak, ticari ürün) için kullanamıyorum. Hyperic'in SIGAR'ı ticari kullanım için lisanslaması mümkündür, ancak buna bakmadım. GPL projelerim için kesinlikle SIGAR'ı gelecekte ele alacağım.
Şu anki ihtiyaçlarım için aşağıdakilere yöneliyorum:
- CPU kullanımı için,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(işlemci başına yük ortalaması) - Bellek için
OperatingSystemMXBean.getTotalPhysicalMemorySize()
veOperatingSystemMXBean.getFreePhysicalMemorySize()
- Disk alanı için
File.getTotalSpace()
veFile.getUsableSpace()
Sınırlamalar:
getSystemLoadAverage()
Ve disk alanı sorgulama yöntemleri Ayrıca Java 6. altında, bazı JMX işlevselliği tüm platformlar için geçerli olmayabilir ancak mevcut (yani o bildirilmiş olduğu getSystemLoadAverage()
döner -1 Windows üzerinde).
Aslen GPL lisanslı olsa da, değişmiştir için Apache 2.0 genellikle kapalı bir kaynaktan, ticari ürünler için de kullanılabilir.