CPU, MEMORY, DISK, IP 조회 방법 정리
CPU 사용량
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
// CPU
private String[] getCPUProcess() {
OperatingSystemMXBean osbean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
//String cpuUsage = String.format("%.2f", osbean.getSystemCpuLoad() * 100);
String cpuUsage = String.format("%.2f", osbean.getSystemLoadAverage()* 100); //2만큼 소숫점이하 자리를 반올림
String[] list = new String[1];
list[0] = cpuUsage; //cpu 사용량
return list;
}
참고한 글에서는 getSystemCpuLoad()를 사용했는데
import java.lang.management.OperationSystemMXBean 을 한 후 클래스 설명을 보니
OperatingSystemMXBean클래스에 해당 메서드가 없었다.
찾아보니 import com.sun.management.OperatingSystemMXBean 을 하면된다고 하는데, (아래링크참고)
https://stackoverflow.com/questions/26872306/alternate-of-getsystemloadaverage-for-windows
잘못된 사용인지 값의 범위가 0 ~ 1 사이어야 하는데, 값이 1을 넘기도 하였다...
그래서 찾아보니 윈도우 OS경우 com.sun.management.OperatingSystemMXBean; 사용불가라고 함.
그래서 import java.lang.management.OperationSystemMXBean 에 있는
getSystemLoadAverage()를 사용했는데 -100.00 으로 결과가 나왔다
이 경우는 평균을 구하는 메소드를 사용할수없을때 음수를 반환한다고한다...
더 찾아보고 리눅스서버에 배포 후에는 문제가 없는지 테스트도 해봐야 될 것 같다.
메모리 사용량
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
// MEMORY
private String[] getMemory() {
MemoryMXBean membean = (MemoryMXBean) ManagementFactory.getMemoryMXBean();
MemoryUsage heap = membean.getHeapMemoryUsage();
MemoryUsage nonheap = membean.getNonHeapMemoryUsage();
long heapInit = heap.getInit(); //초기상태의메모리
long heapUsed = heap.getUsed(); //heap 사용중인메모리
long nonheapUsed = nonheap.getUsed();//nonheap 사용중인메모리
long heapCommit = heap.getCommitted(); //JVM에할당된메모리
long heapMax = heap.getMax(); //총메모리양
String[] list = new String[2];
list[0] = String.valueOf(heapInit);
list[0] = String.valueOf(heapUsed);
list[1] = String.valueOf(nonheapUsed);
list[3] = String.valueOf(heapCommit);
list[4] = String.valueOf(heapMax);
return list;
}
디스크 사용량
import java.io.File;
// DISK
private String[] getDiskSpace() {
File root = null;
try {
root = new File("/");
String[] list = new String[2];
list[0] = toMB(root.getTotalSpace()); //전체공간
list[1] = toMB(root.getUsableSpace()); //사용가능한공간
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private String toMB(long size) {
return String.valueOf((int) (size / (1024 * 1024)));
}
서버 IP
import java.net.InetAddress;
// IP
private String getServerIp() {
String ip = "";
InetAddress local = null;
try {
local = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip = local.getHostAddress();
return ip;
}
WAS나 웹서버가 구동되는 서버 IP를 조회할 때 위와 같은 코드로 IP를 찾을 경우
OS가 Window인 경우에만 조회가 정상적으로 가능하지만,
UNIX나 LINUX에서 해당 소스를 사용하게 되면
127.0.0.1이거나 java.net.UnknownHostException 등의 에러가 나면서
제대로 IP를 조회할 수 없는 문제가 발생한다.
OS에 상관없이 고정 IP를 가져오기 위해선 아래와 같은 코드를 사용하면 된다.
String ip = "";
try {
Enumeration<NetworkInterface> nienum = NetworkInterface.getNetworkInterfaces();
while (nienum.hasMoreElements()) {
NetworkInterface ni = nienum.nextElement();
Enumeration<InetAddress> kk= ni.getInetAddresses();
while (kk.hasMoreElements()) {
InetAddress inetAddress = kk.nextElement();
if (!inetAddress.isLoopbackAddress() &&
!inetAddress.isLinkLocalAddress() &&
inetAddress.isSiteLocalAddress()) {
ip = inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
참고 출처 : https://narup.tistory.com/49
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] org.json.simple.JSONObject cannot be cast to net.sf.json.JSONObject (0) | 2023.11.06 |
---|---|
[JAVA] Quartz 스케줄러 - 주기적으로 작업 실행 (0) | 2023.09.20 |
[JAVA] 연산자 · 연산자우선순위 (0) | 2023.09.18 |
[JAVA] Cipher - 암호화 복호화 (0) | 2023.09.15 |
[JAVA] 운영체제 경로 구분자 System.getProperty() (0) | 2023.08.24 |