获取服务器 内存大小 内存使用率 CPU总数 CPU利用率

该博客介绍了一个实时监控系统,用于获取和展示服务器的内存和CPU使用情况。通过使用Oshi库和Sigar库,程序能够周期性地更新内存大小、内存使用率、CPU总数以及CPU利用率,并以百分比形式展示。此系统有助于系统管理员监控资源消耗,确保服务器性能稳定。
摘要由CSDN通过智能技术生成
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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值