1. 程式人生 > 實用技巧 >java獲取伺服器資訊

java獲取伺服器資訊

引入依賴

build.gradle

compile 'net.java.dev.jna:jna:5.6.0'
compile 'net.java.dev.jna:jna-platform:5.6.0'
compile 'com.github.oshi:oshi-core:5.3.7'
compile 'cn.hutool:hutool-all:5.5.6'

mvaen

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.6.0</version>
</dependency>
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna-platform</artifactId>
    <version>5.6.0</version>
</dependency>
<dependency>
    <groupId>com.github.oshi</groupId>
    <artifactId>oshi-core</artifactId>
    <version>5.3.7</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.6</version>
</dependency>

程式碼

private String format(long size) {
    if (size < 1024) {
        return size + "B";
    } else {
        size = size / 1024;
    }
    if (size < 1024) {
        return size + "KB";
    } else {
        size = size / 1024;
    }
    if (size < 1024) {
        size = size * 100;
        return size / 100 + "." + size % 100 + "MB";
    } else {
        size = size * 100 / 1024;
        return size / 100 + "." + size % 100 + "GB";
    }
}

@Test
public void info() {
    Console.log("======= 作業系統資訊 ======");
    OsInfo osInfo = SystemUtil.getOsInfo();
    Console.log("作業系統:{}", osInfo.getName());
    Console.log("系統版本:{}", osInfo.getVersion());
    Console.log("系統架構:{}", osInfo.getArch());
    Console.log("JVM總記憶體:{}", format(SystemUtil.getTotalMemory()));
    Console.log("JVM剩餘記憶體:{}", format(SystemUtil.getFreeMemory()));

    Console.log("======= java資訊 ======");
    JavaRuntimeInfo runtimeInfo = SystemUtil.getJavaRuntimeInfo();
    Console.log("java版本:{}", runtimeInfo.getVersion());
    Console.log("java架構:{}", runtimeInfo.getSunArchDataModel());
    Console.log("java目錄:{}", runtimeInfo.getHomeDir());

    SystemInfo systemInfo = new SystemInfo();
    HardwareAbstractionLayer hardware = systemInfo.getHardware();
    OperatingSystem operatingSystem = systemInfo.getOperatingSystem();

    Console.log("======= CPU資訊 ======");
    CentralProcessor cpu = hardware.getProcessor();
    CentralProcessor.ProcessorIdentifier cpuInfo = cpu.getProcessorIdentifier();
    Console.log("cpu數量:{}", cpu.getPhysicalPackageCount());
    Console.log("cpu核心數:{}", cpu.getPhysicalProcessorCount());
    Console.log("cpu執行緒數:{}", cpu.getLogicalProcessorCount());
    Console.log("cpuID:{}", cpuInfo.getProcessorID());
    Console.log("cpu名稱:{}", cpuInfo.getName());
    Console.log("cpu標識:{}", cpuInfo.getIdentifier());

    Console.log("======= 主機板資訊 ======");
    ComputerSystem computer = hardware.getComputerSystem();
    Console.log("主機板型號:{}", computer.getModel());
    Console.log("主機板序列號:{}", computer.getSerialNumber());

    Console.log("======= 記憶體資訊 ======");
    GlobalMemory memory = hardware.getMemory();
    Console.log("記憶體大小:{}", format(memory.getTotal()));
    Console.log("可用記憶體:{}", format(memory.getAvailable()));
    Console.log("==========");
    List<PhysicalMemory> memoryList = memory.getPhysicalMemory();
    memoryList.forEach((item) -> {
        Console.log("記憶體型號:{}", item.getManufacturer());
        Console.log("記憶體規格:{}", item.getMemoryType());
        Console.log("記憶體主頻:{}", format(item.getClockSpeed()));
        Console.log("記憶體大小:{}", format(item.getCapacity()));
        Console.log("==========");
    });

    Console.log("======= 物理磁碟資訊 ======");
    List<HWDiskStore> diskList = hardware.getDiskStores();
    diskList.forEach((disk) -> {
        Console.log("名稱:{}", disk.getName());
        Console.log("型號:{}", disk.getModel());
        Console.log("序號:{}", disk.getSerial());
        Console.log("大小:{}", format(disk.getSize()));
        Console.log("==========");
    });

    Console.log("======= 邏輯磁碟資訊 ======");
    FileSystem fileSystem = operatingSystem.getFileSystem();
    List<OSFileStore> fileList = fileSystem.getFileStores(true);
    fileList.forEach((file) -> {
        Console.log("名稱:{}", file.getName());
        Console.log("UUID:{}", file.getUUID());
        Console.log("碟符:{}", file.getMount());
        Console.log("檔案型別:{}", file.getType());
        Console.log("總大小:{}", format(file.getTotalSpace()));
        Console.log("剩餘大小:{}", format(file.getUsableSpace()));
        Console.log("==========");
    });
}

輸出

======= 作業系統資訊 ======
作業系統:Windows 10
系統版本:10.0
系統架構:amd64
JVM總記憶體:243.0MB
JVM剩餘記憶體:189.0MB

======= java資訊 ======
java版本:1.8.0_221-b11
java架構:64
java目錄:C:\app\Java\x64\jdk1.8.0_221\jre

======= CPU資訊 ======
cpu數量:1
cpu核心數:4
cpu執行緒數:8
cpuID:BFEBFBFF000906E9
cpu名稱:Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
cpu標識:Intel64 Family 6 Model 158 Stepping 9

======= 主機板資訊 ======
主機板型號:Inspiron 15 7000 Gaming
主機板序列號:58D9Y32

======= 記憶體資訊 ======
記憶體大小:15.86GB
可用記憶體:5.18GB
==========
記憶體型號:Samsung
記憶體規格:DDR4
記憶體主頻:2.23GB
記憶體大小:8.0GB
==========
記憶體型號:SK Hynix
記憶體規格:DDR4
記憶體主頻:2.23GB
記憶體大小:8.0GB
==========

======= 物理磁碟資訊 ======
19:22:14.526 [main] DEBUG oshi.util.platform.windows.PerfCounterQuery - Localized PhysicalDisk to PhysicalDisk
名稱:\\.\PHYSICALDRIVE0
型號:KINGSTON SUV500M8240G (標準磁碟驅動器)
序號:50026B768258ACA9
大小:223.56GB
==========
名稱:\\.\PHYSICALDRIVE1
型號:TOSHIBA MQ01ABD100 (標準磁碟驅動器)
序號:           87C3S6KZS
大小:931.51GB
==========

======= 邏輯磁碟資訊 ======
名稱:本地固定磁碟 (C:)
UUID:e4769774-92f9-431e-ad1d-96963d9d03bc
碟符:C:\
檔案型別:NTFS
總大小:221.37GB
剩餘大小:88.8GB
==========
名稱:本地固定磁碟 (D:)
UUID:81c881c4-76ff-48af-b0c1-2070f753310f
碟符:D:\
檔案型別:NTFS
總大小:300.0GB
剩餘大小:218.97GB
==========
名稱:本地固定磁碟 (E:)
UUID:a689f086-7265-4c3e-b622-8a641787dd5e
碟符:E:\
檔案型別:NTFS
總大小:300.72GB
剩餘大小:136.71GB
==========
名稱:本地固定磁碟 (F:)
UUID:8c126ad0-bf59-457d-8c2f-e3248e03e9f7
碟符:F:\
檔案型別:NTFS
總大小:330.65GB
剩餘大小:213.28GB
==========