문제

현재 여러 플랫폼에서 실행될 수 있지만 주로 Solaris, Linux 및 Windows의 변형이 될 수있는 Java 앱을 구축하고 있습니다.

누군가 현재 사용 된 디스크 공간, CPU 사용률 및 기본 OS에서 사용 된 메모리와 같은 정보를 성공적으로 추출 할 수 있었습니까?Java 앱 자체가 소비하는 것은 어떻습니까?

JNI를 사용하지 않고이 정보를 얻고 싶습니다.

도움이 되었습니까?

해결책

런타임 클래스에서 제한된 메모리 정보를 얻을 수 있습니다.정확히 당신이 찾고있는 것은 아니지만 완전성을 위해 그것을 제공 할 것이라고 생각했습니다.여기에 작은 예가 있습니다.편집 : java.io.File 클래스에서 디스크 사용량 정보를 가져올 수도 있습니다.디스크 공간 사용량은 Java 1.6 이상이 필요합니다. 라코 디스

다른 팁

java.lang.management 패키지는 런타임보다 훨씬 더 많은 정보를 제공합니다. 예를 들어 힙이 아닌 메모리 (ManagementFactory.getMemoryMXBean().getHeapMemoryUsage())와 별도로 힙 메모리 (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage())를 제공합니다.

자신의 JNI 코드를 작성하지 않고도 프로세스 CPU 사용량을 얻을 수 있지만 java.lang.management.OperatingSystemMXBeancom.sun.management.OperatingSystemMXBean로 캐스팅해야합니다.이것은 Windows 및 Linux에서 작동하며 다른 곳에서는 테스트하지 않았습니다.

예를 들어 ... 더 정확한 판독 값을 얻으려면 get getCpuUsage () 메서드를 더 자주 호출합니다. 라코 디스

가장 좋은 방법은 SIGAR API by Hyperic 을 구현하는 것입니다.대부분의 주요 운영 체제에서 작동하며 (최신에 가깝게) 작업하기가 매우 쉽습니다.개발자는 포럼과 메일 링리스트에 대해 매우 반응이 좋습니다. GPL2 Apache 라이선스 도 좋습니다..그들은 자바로도 수많은 예제를 제공합니다!

SIGAR== 시스템 정보, 수집 및보고 도구

JNA를 사용하고 (설치할 네이티브 라이브러리가 없음) 현재 개발중인 Java 프로젝트가 있습니다.현재 Linux, OSX, Windows, Solaris 및 FreeBSD를 지원하며 RAM, CPU, 배터리 및 파일 시스템 정보를 제공합니다.

System.getenv()를 사용하여 관련 환경 변수 이름을 매개 변수로 전달하여 시스템 수준의 정보를 얻을 수 있습니다.예를 들어 Windows의 경우 : 라코 디스

다른 운영 체제의 경우 관련 환경 변수의 유무 및 이름이 다릅니다.

창의 경우 저는 이쪽으로갔습니다. 라코 디스

다음은 링크 세부 정보 포함

Maven을 통해 OSHI 종속성 추가 : 라코 디스

배터리 남은 용량을 백분율로 확인 : 라코 디스

java.lang.management 패키지.예 :

  • OperatingSystemMXBean.getSystemLoadAverage()
  • ThreadMXBean.getCurrentThreadCpuTime()
  • ThreadMXBean.getCurrentThreadUserTime()

    다른 유용한 정보도 많이 있습니다.

보통 낮은 수준의 OS 정보를 얻으려면 Runtime.exec ()로 원하는 정보를 제공하는 OS 특정 명령을 호출하거나 Linux에서 / proc / *와 같은 파일을 읽을 수 있습니다.

CPU 사용은 간단하지 않습니다. com.sun.management.OperatingSystemMXBean.getProcessCpuTime을 통한 java.lang.management가 닫힙니다 (위의 Patrick의 훌륭한 코드 스 니펫 참조).방법.다른 프로세스에서 소비 한 CPU 시간 또는 프로세스와 관련된 시스템 활동을 수행하는 데 소비 된 CPU 시간에 대해서는 알려주지 않습니다.

예를 들어 네트워크 집약적 인 자바 프로세스가 있습니다. 실행중인 유일한 작업이고 CPU는 99 %이지만 그 중 55 %만이 "프로세서 CPU"로보고됩니다.

MX bean의 유일한 CPU 관련 항목 임에도 불구하고 쓸모없는 것이므로 "로드 평균"을 시작하지 마십시오.가끔씩 태양이 "getTotalCpuTime"과 같은 것을 노출한다면 ...

진지한 CPU 모니터링을 위해서는 Matt가 언급 한 SIGAR가 최선의 방법 인 것 같습니다.

아직 개발 중이지만 이미 jHardware 를 사용할 수 있습니다.

Java를 사용하여 시스템 데이터를 스크랩하는 간단한 라이브러리입니다.Linux와 Windows에서 모두 작동합니다. 라코 디스

Jrockit VM을 사용하는 경우 VM CPU 사용량을 얻는 다른 방법이 있습니다.런타임 빈은 프로세서 당 CPU로드를 제공 할 수도 있습니다.Tomcat 성능을 관찰하기 위해 Red Hat Linux에서만 이것을 사용했습니다.이 작업을 수행하려면 catalina.sh에서 JMX 원격을 활성화해야합니다. 라코 디스

Windows에서 systeminfo 명령을 실행하고 다음 코드를 사용하여 출력을 검색 할 수 있습니다. 라코 디스

OS 수준 정보를 얻는 데 사용할 수있는 간단한 방법 중 하나이며 잘 작동하는 Mac에서 테스트했습니다. 라코 디스

여기 에서 운영 체제에 대한 많은 관련 측정 항목을 찾을 수 있습니다.a>

자바 / com 통합으로이 작업을 수행 할 수 있습니다.WMI 기능에 액세스하면 모든 정보를 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top