2014-06-11 11 views
3

나는 리눅스에서 CPU (다른 것들 사이)를 모니터하는 데 사용하는 자바 모니터링 애플리케이션을 가지고있다.JVM의 모든 스레드에 대해 CPU 백분율을 얻으려면 어떻게해야합니까?

내 프로세스의 CPU 사용량을 얻기 위해 Sigar를 사용하고 있습니다. http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3-src/docs/javadoc/org/hyperic/sigar/Sigar.html#getProcCpu%28long%29

그러나 이것은 공정 단계에 불과합니다. htop은 내 응용 프로그램의 스레드와 각각 사용중인 CPU 백분율을 표시합니다.

Sigar로 할 수 있습니까?

멀티 코어 박스에 있다면 코어 당 CPU 사용률을 얻을 수 있습니까?

CPU가 오랜 기간 동안 100 % 실행될 때 경고하고 스레드 목록의 가능한 범인을 확인하고 싶습니다.

+0

당신이 항상 사용 할 수 있습니다' Process process = Runtime.getRuntime(). exec (yourcmd);'명령 (htop 등)을 실행 한 다음'process.getInputStream();'명령을 사용하여 반환 된 데이터를 읽습니다. – SnakeDoc

답변

0

는 CPU 부하가 표준 자바 API의 일부가 아닌 것 같다 당신이 com.sun.management.OperatingSystemMXBean에 캐스트 할 필요가 있지만, JMX는 자바 런타임에서이 정보를 얻을하는 데 사용할 수 있습니다

OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); 
double loadAverage = osBean.getSystemLoadAverage(); 
System.out.println("Load average: " + loadAverage); 

if (osBean instanceof com.sun.management.OperatingSystemMXBean) 
{ 
    com.sun.management.OperatingSystemMXBean sunOsBean = (com.sun.management.OperatingSystemMXBean)osBean; 
    double cpuLoad = sunOsBean.getSystemCpuLoad(); 
    System.out.println("CPU load: " + cpuLoad); 
} 
+0

그러나 이것은 알고있는 한, 스레드 레벨이 아닌 프로세스 레벨에 있다는 점에서 유용합니다. – opticyclic