2013-11-05 8 views
7

Java를 사용하여 현재 실행중인 Java Virtual Machine에서 사용되는 CPU의 비율을 얻으려고합니다. 저의 연구는 저에게 com.sun.management.OperatingSystemMXBean 클래스 사용에 대해 지적했습니다.OperatingSystemMXBean을 사용하여 CPU 사용량을 얻으십시오.

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()); 

    } 

} 

두 대의 컴퓨터에서이 작업을 테스트 한 후, 나는 두 통화 -1.0의 결과를 얻는 중지 할 수 없습니다 : 온라인 예에 따라, 나는 다음과 같은 서면으로 작성했습니다. Java 7 및 6의 64 비트 및 32 비트 버전을 다양한 방법으로 사용하여이 코드를 실행 해 보았습니다. 그래도, 내가 할 모든 -1.0, 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.

이다. CPU로드를 얻는 것이 중요하며 Sigar와 같은 다른 라이브러리를 사용하지 않는 것이 좋습니다. 누구든지이 문제에 대해 어떤 권고 사항이나 통찰력을 가지고 있습니까?

답변

21

누군가에게 도움이 될 수있는 경우를 대비하여 내 자신의 질문에 대답합니다.

내가 뭘하고 있었는지 기술적으로는 올바르지 만, OperatingSystemMXBean에 CPU 사용량 정보를 수집하는 데 충분한 시간을주지 못했습니다. JVM은 실제로 CPU 사용 정보를 수집하기 전에 몇 초 동안 실행되어야하며 새로 고침 해결은 구현에 따라 다릅니다.

public static void main(String[] args) { 
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory 
      .getOperatingSystemMXBean(); 

    while (true) { 
     System.out.println(bean.getProcessCpuLoad()); 
     System.out.println(bean.getSystemCpuLoad()); 
    } 

} 

는 희망이 사람이 답변을

+0

감사합니다 도움이 될 수 있습니다하지만 난 실행 관찰 한 : 내 컴퓨터에 ~ 2 초 후에 다음과 같은 변화의 코드를 실행

사용 정보를 생산하기 시작합니다 이 코드는 CPU 사용률을 30-40 % 증가시킵니다. 즉,이 코드를 실행할 때마다 CPU 사용률이 증가합니다. –

+3

@Shashank이 코드는 CPU 사용량 정보를 얻는 데 걸리는 시간을 보여주기위한 것입니다. 실제 시스템에서는이 호출을 무한 루프로 수행하면 안됩니다. 유스 케이스 당 한 번만 실행하면 응용 프로그램이 실행되는 순간에 충분합니다. – Kon

+0

이 코드를 1-2 초 동안 실행하는 경우에도 CPU 사용량이 증가합니다. –

관련 문제