package com.example.demo;
import cn.hutool.core.lang.Console;
import cn.hutool.system.oshi.CpuInfo;
import cn.hutool.system.oshi.OshiUtil;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class SystemInfo {
private static final DecimalFormat LOAD_FORMAT = new DecimalFormat("#.00");
public static void main(String[] args) throws Exception {
getCpuUsed();
getMemoryUsed();
getDiskUsed();
getProcessorInfo();
}
private static void getProcessorInfo() {
CentralProcessor processor = OshiUtil.getProcessor();
CentralProcessor.ProcessorIdentifier processorIdentifier = processor.getProcessorIdentifier();
System.out.println("处理器名称: " + processorIdentifier.getName());
System.out.println("物理处理器: " + processor.getPhysicalProcessorCount());
System.out.println("逻辑处理器: " + processor.getLogicalProcessorCount());
}
private static void getCpuUsed() {
CpuInfo cpuInfo = OshiUtil.getCpuInfo();
Console.log("CPU核心数量 : ", cpuInfo.getCpuNum());
String cpuUsage = LOAD_FORMAT.format(100 - cpuInfo.getFree());
// 当前的CPU占用
Console.log("CPU占用 : ", cpuUsage);
// CPU利用率
Console.log("CPU利用率 : ", cpuUsage);
// CPU剩余可用
Console.log("CPU剩余可用 : ", cpuInfo.getFree());
System.out.println("***************");
}
private static void getMemoryUsed() {
GlobalMemory memory = OshiUtil.getMemory();
long total = memory.getTotal();
BigDecimal memoryGB = new BigDecimal(total).divide(new BigDecimal(1024 * 1024 * 1024), 0, RoundingMode.HALF_UP);
Console.log("总内存大小 : ", memoryGB);
long available = memory.getAvailable();
BigDecimal residue = new BigDecimal(available).divide(new BigDecimal(1024 * 1024 * 1024), 1, RoundingMode.HALF_UP);
Console.log("剩余内存 : ", residue);
BigDecimal memoryUsage = memoryGB.subtract(residue);
Console.log("已使用内存 : ", memoryUsage);
System.out.println("***************");
}
public static void getDiskUsed() {
File[] roots = File.listRoots();
for (File root : roots) {
System.out.println("Drive: " + root);
BigDecimal total = new BigDecimal(root.getTotalSpace()).divide(new BigDecimal(1024 * 1024 * 1024), 1, RoundingMode.HALF_UP);
System.out.println("总空间: " + total);
BigDecimal usableSpace = new BigDecimal(root.getUsableSpace()).divide(new BigDecimal(1024 * 1024 * 1024), 1, RoundingMode.HALF_UP);
System.out.println("已使用空间: " + usableSpace);
BigDecimal freeSpace = new BigDecimal(root.getTotalSpace() - root.getUsableSpace()).divide(new BigDecimal(1024 * 1024 * 1024), 1, RoundingMode.HALF_UP);
System.out.println("剩余空间: " + freeSpace);
}
System.out.println("***************");
}
}