2017-09-07 1 views
2

우리는 CPU로드를 모니터링해야하는 코드 섹션을 가지고 있습니다. 다음 코드 줄을 사용하여 CPU로드를 얻습니다.서비스로 실행하면 OperatingSystemMXBean.getSystemCpuLoad가 작동하지 않습니다.

((com.sun.management.OperatingSystemMXBean) ManagementFactory 
    .getOperatingSystemMXBean()).getSystemCpuLoad(); 

테스트하는 동안 문제가 없습니다.

2012 년 Windows 서버 에 서비스으로 실행될 때 getSystemCpuLoad는 항상 -1을 반환합니다.

서비스를 중지하고 응용 프로그램으로 실행하면 (여전히 2012 윈도우 서버 시스템에서) 다시 작동합니다.

클래스 패스의 차이점과 환경 변수의 차이점을 살펴본 데 차이점을 찾을 수 없습니다.

누구나 getSystemCpuLoad가 응용 프로그램에서는 실행되지만 서비스로 실행되지 않는 이유는 무엇입니까?

+0

이 코드는 네이티브 코드 [OperatingSystemImpl.c'에 있습니다.] (http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/9d617cfd6717/src/windows/native/)를 호출합니다. sun/management/OperatingSystemImpl.c), 거기에 추적 할 수있는'return -1'이 너무 많습니다. –

답변

0

마침내 문제의 원인을 발견했습니다. 다른 사람이 다음을 실행하는 경우 :

"Performance Log Users"그룹에 대해 서비스를 실행중인 사용자를 추가해야했습니다. 일단 그것이 여기에 추가되면, 나는 시스템 CPU로드를 얻을 수있었습니다.

관련 문제