Próbuję użyć języka Java, aby uzyskać procent procesora używanego przez aktualnie działającą wirtualną maszynę Java. Moje badania wskazały mi na używanie klasy com.sun.management.OperatingSystemMXBean
. Poniższe przykłady online Pisałem następujące:Używanie OperatingSystemMXBean do pobrania procesora
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
public class TestClass {
public static void main (String[] args) {
OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
System.out.println(bean.getProcessCpuLoad());
System.out.println(bean.getSystemCpuLoad());
}
}
Po przetestowaniu tego na dwóch komputerach, nie mogę powstrzymać się wyniku -1.0
dla obu połączeń. Próbowałem uruchomić ten kod przy użyciu zarówno 64- jak i 32-bitowych wersji Java 7 i 6 za pomocą różnych metod. Mimo to, wszystko mogę to wydruk z -1.0
które according to the Javadocs,
All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system. If the system recent cpu usage is not available, the method returns a negative value.
nie wiem co jeszcze do zrobienia. Założenie obciążenia procesora jest krytyczne i chciałbym uniknąć użycia innej biblioteki, takiej jak Sigar. Czy ktoś ma jakieś zalecenia lub ma jakiś wgląd w ten problem?
Dziękuję za tę odpowiedź, ale zauważyli, że działa ten kod zwiększa wykorzystanie procesora o 30-40%. Oznacza to, że uzyskujemy zwiększone wykorzystanie procesora za każdym razem, gdy uruchamiamy ten kod. –
@Shashank Ten kod ma na celu jedynie zademonstrowanie opóźnienia w pobieraniu informacji o użyciu procesora. W prawdziwym systemie nie powinieneś wykonywać tego połączenia w nieskończonej pętli. Wystarczy raz na przypadek użycia wystarczy po kilku chwilach działania aplikacji. – Kon
Nawet uruchomienie tego kodu przez 1-2 sekundy zwiększa użycie procesora. –