import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
import org.hyperic.sigar.SigarException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/MemoryCPU ")
@Slf4j
public class MemoryCPU {
private static String MemorySize = null;//内存大小
private static String MemoryUsage = null;//内存使用率
private static int TotalCPUs;//CPU总数
private static String CPUUtilization = null;//CPU利用率
@RequestMapping("/get_Memory_CPU")
public String get_Memory_CPU() {
String Memory_CPU = "内存大小 : "+MemorySize+"\r\n"+
"内存使用率 : "+MemoryUsage+"\r\n"+
"CPU总数 : "+TotalCPUs+"\r\n"+
"CPU利用率 : "+CPUUtilization+"\r\n";
return Memory_CPU;
}
public static void Memory_CPU() throws InterruptedException, SigarException {
while(true) {
SystemInfo systemInfo = new SystemInfo();
GlobalMemory memory = systemInfo.getHardware().getMemory();
long totalByte = memory.getTotal();
long acaliableByte = memory.getAvailable();
CentralProcessor processor = systemInfo.getHardware().getProcessor();
long[] prevTicks = processor.getSystemCpuLoadTicks();
long[] ticks = processor.getSystemCpuLoadTicks();
long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
MemorySize =formatByte(totalByte);
MemoryUsage = new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte);
TotalCPUs = processor.getLogicalProcessorCount();
CPUUtilization = new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu));
Thread.sleep(1000);
}
}
public static String formatByte(long byteNumber){
double FORMAT = 1024.0;
double kbNumber = byteNumber/FORMAT;
if(kbNumber<FORMAT){
return new DecimalFormat("#.##KB").format(kbNumber);
}
double mbNumber = kbNumber/FORMAT;
if(mbNumber<FORMAT){
return new DecimalFormat("#.##MB").format(mbNumber);
}
double gbNumber = mbNumber/FORMAT;
if(gbNumber<FORMAT){
return new DecimalFormat("#.##GB").format(gbNumber);
}
double tbNumber = gbNumber/FORMAT;
return new DecimalFormat("#.##TB").format(tbNumber);
}
}
获取服务器 内存大小 内存使用率 CPU总数 CPU利用率
最新推荐文章于 2024-01-02 09:15:04 发布
该博客介绍了一个实时监控系统,用于获取和展示服务器的内存和CPU使用情况。通过使用Oshi库和Sigar库,程序能够周期性地更新内存大小、内存使用率、CPU总数以及CPU利用率,并以百分比形式展示。此系统有助于系统管理员监控资源消耗,确保服务器性能稳定。
摘要由CSDN通过智能技术生成