Java로 다음 시스템 정보를 모니터링하고 싶습니다.
- 현재 CPU 사용량 ** (퍼센트)
- 사용 가능한 메모리 * (무료 / 전체)
사용 가능한 디스크 공간 (사용 가능 / 전체)
* JVM뿐만 아니라 전체 시스템에서 사용 가능한 전체 메모리를 의미합니다.
외부 프로그램을 호출하거나 JNI를 사용하는 자체 코드에 의존하지 않는 크로스 플랫폼 솔루션 (Linux, Mac 및 Windows)을 찾고 있습니다. 이것들은 실행 가능한 옵션이지만 누군가가 이미 더 나은 솔루션을 가지고 있다면 OS 특정 코드를 직접 유지하지 않는 것이 좋습니다.
신뢰할 수 있고 크로스 플랫폼 방식 으로이 작업을 수행하는 무료 라이브러리가 있다면 외부 호출을하거나 네이티브 코드 자체를 사용하는 경우에도 좋습니다.
어떤 제안이라도 대단히 감사합니다.
명확히하기 위해 Java 프로세스뿐만 아니라 전체 시스템의 현재 CPU 사용량을 얻고 싶습니다.
SIGAR API는 하나의 패키지로 찾고있는 모든 기능을 제공하므로 지금까지 내 질문에 가장 적합한 답변입니다. 그러나 GPL에 따라 라이센스가 부여되었으므로 원래 목적 (폐쇄 소스, 상용 제품)으로 사용할 수 없습니다. Hyperic이 상업적 용도로 SIGAR에 라이센스를 부여 할 수도 있지만, 살펴 보지는 않았습니다. 내 GPL 프로젝트의 경우 앞으로 SIGAR을 확실히 고려할 것입니다.
현재 필요에 따라 다음과 같이 기울고 있습니다.
- CPU 사용량의 경우
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
( CPU 당로드 평균) - 메모리의 경우,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
및OperatingSystemMXBean.getFreePhysicalMemorySize()
- 디스크 공간
File.getTotalSpace()
및File.getUsableSpace()
한계 :
getSystemLoadAverage()
방법을 질의 및 디스크 공간 또한 자바 6에 따라, 일부 JMX 기능 (즉이보고되고있어 모든 플랫폼에 사용할 수 없습니다에서만 사용할 수 있습니다getSystemLoadAverage()
-1을 반환 Windows의 경우).
원래 GPL 라이센스 있지만,이 변경되었습니다 에 아파치 2.0 일반적으로 닫힌 소스, 상용 제품에 사용할 수 있습니다.