티스토리 뷰

들어가며

  • 장비 하드웨어 상태를 모니터링하는 애플리케이션을 개발하다 보면 하드웨어 상태 정보를 알아내는 기능이 필요합니다. 
    • RAM, CPU, DISK, Network 등등 
  • Java를 통해 OSHI (Operating System & Hardware Information) 라이브러리를 사용하여 시스템의 RAM Memory 정보를 가져오는 방법을 알아보고자 합니다.

 


 

Java OSHI (Operating System & Hardware Information)

  • OS와 HW 정보를 제공하는 JNA 기반의 Java 라이브러리 입니다.
  • 별도의 설치 필요없으며 크로스 플랫폼에 대하여 여러 system 정보 (메모리, CPU, Disk 정보 등등) 를 제공하기 위해 개발된 라이브러리
 

oshi/oshi

Native Operating System and Hardware Information. Contribute to oshi/oshi development by creating an account on GitHub.

github.com


라이브러리 적용

  • 빌드 방법에 맞추어 라이브러리를 프로젝트에 적용하겠습니다.
 

Maven Repository: com.github.oshi » oshi-core » 5.0.0

com.github.oshi oshi-core 5.0.0 // https://mvnrepository.com/artifact/com.github.oshi/oshi-core compile group: 'com.github.oshi', name: 'oshi-core', version: '5.0.0' // https://mvnrepository.com/artifact/com.github.oshi/oshi-core libraryDependencies += "co

mvnrepository.com

Maven

<dependency>
  <groupId>com.github.oshi</groupId>
  <artifactId>oshi-core</artifactId>
  <version>5.0.0</version>
</dependency>

Gradle

compile group: 'com.github.oshi', name: 'oshi-core', version: '5.0.0'

예제

  • SystemUtil이라는 정적 Util 클래스를 만들어 메소드를 추가하는 방식으로 구현합니다.

장비의 총 메모리 가져오기

  • 참고로 memory의 반환값 단위는 Byte이다.
public static long getTotalMemoryByte() {
  SystemInfo si = new SystemInfo();
  final HardwareAbstractionLayer hw = si.getHardware();
  final GlobalMemory memory = hw.getMemory();

  return memory.getTotal();
}

 

장비의 가용 메모리 가져오기

public static long getAvailableMemoryByte() {
    SystemInfo si = new SystemInfo();
    final HardwareAbstractionLayer hw = si.getHardware();
    final GlobalMemory memory = hw.getMemory();

    return memory.getAvailable();
}

 

장비 가용 메모리 사용량(%) 구하기

public static double getMemoryPercent() {
  return (double) getAvailableMemoryByte() / getTotalMemoryByte() * 100;
}

 

테스트 코드

  • 일반적인 테스트라기 보단 .. 출력 테스트라고 보면 좋을 것 같다.
@Test
public void testGetMemory() {
  System.out.println("Total Memory(Byte): " + SystemUtil.getTotalMemoryByte());
  System.out.println("Total Memory(KB): " + SystemUtil.getTotalMemoryByte() / 1024 );
  System.out.println("Total Memory(MB): " + SystemUtil.getTotalMemoryByte() / 1024 / 1024 );
  System.out.println("Total Memory(GB): " + SystemUtil.getTotalMemoryByte() / 1024 / 1024 / 1024 );

  System.out.println("Available Memory(Byte): " + SystemUtil.getAvailableMemoryByte());
  System.out.println("Available Memory(KB): " + SystemUtil.getAvailableMemoryByte() / 1024 );
  System.out.println("Available Memory(MB): " + SystemUtil.getAvailableMemoryByte() / 1024 / 1024 );
  System.out.println("Available Memory(GB): " + SystemUtil.getAvailableMemoryByte() / 1024 / 1024 / 1024 );

  System.out.println("Percentage of Memory(%): " + SystemUtil.getMemoryPercent());
}

관련글

 

[Java] 코드(프로그램 내부)에서 외부 JAR 파일 실행시키는 방법

들어가며 Java 애플리케이션 내부에서 코드상으로 외부 JAR 파일을 실행시켜야 하는 경우가 있다. 이때 프로그램 내부에서 별도의 JAR 파일을 실행시키는 방법에 대해서 공유하고 한다. ProcessBuilder

jinseongsoft.tistory.com

 

[Java] Java Stream 여러 필드 정렬(Sorting) 방법

Java 8 – Sorting stream on multiple fields Java를 사용하면서 데이터 집합을 Sorting을 할 때 조건, 필드가 여러가지가 될 수가 있다. 이때 여러 필드를 비교 하는 방법을 알아보고자 한다. 방법 우선 실..

jinseongsoft.tistory.com

 

(Java) 파일 FTP 프로토콜 전송 기능 구현방법 (FTP Client 구현)

FTP Client 구현방법 Java 파일 전송 시에 FTP 프로토콜로 FTP Server에 접속하여 파일을 전송하는 기능구현 방법을 공유하고자 한다. 구현방법 FTP Server에 접속하여 대상파일 저장하는 기능이다. public void d..

jinseongsoft.tistory.com


끝으로

이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏

광고 클릭은 많은 힘이 됩니다! 

 

반응형
댓글