原创

利用 OSHI获取机器的硬件信息

什么是 OSHI?

OSHI(Operating System and Hardware Information)是一个开源的Java库,用于获取操作系统和硬件的详细信息。它提供了一种简单而统一的方式来访问系统的各种信息,如CPU、内存、磁盘、网络接口、传感器等。OSHI的设计目标是跨平台兼容,因此它可以在Windows、Linux、macOS等多个操作系统上运行。

OSHI 的应用场景

  1. 系统监控:OSHI可以用于开发系统监控工具,实时获取和显示系统的硬件和操作系统状态,如CPU使用率、内存使用情况、磁盘读写速度等。

  2. 性能分析:开发人员可以使用OSHI来分析应用程序的性能,识别潜在的瓶颈和资源消耗点。

  3. 硬件信息收集:OSHI可以用于收集和记录硬件信息,帮助IT管理员进行资产管理和维护。

  4. 诊断工具:OSHI可以帮助开发诊断工具,检测系统的健康状态,并在出现异常时提供警报。

OSHI 代码工程

要在Java项目中使用OSHI库,首先需要将其添加为项目的依赖。以下是通过Maven和Gradle添加OSHI依赖的示例:

Maven

pom.xml中添加以下依赖:

<dependency>
    <groupId>com.github.oshi</groupId>
    <artifactId>oshi-core</artifactId>
    <version>6.2.2</version>
</dependency>

示例代码

以下是一个使用OSHI库获取系统信息的简单示例:

package com.et;

import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
import oshi.software.os.OperatingSystem;

public class OshiExample {
    public static void main(String[] args) {
        // Create a SystemInfo object
        SystemInfo systemInfo = new SystemInfo();

        // Get CPU information
        CentralProcessor processor = systemInfo.getHardware().getProcessor();
        System.out.println("CPU Logical Processor Count: " + processor.getLogicalProcessorCount());
        System.out.println("CPU Physical Processor Count: " + processor.getPhysicalProcessorCount());
        System.out.println("CPU Vendor: " + processor.getProcessorIdentifier().getVendor());
        System.out.println("CPU Name: " + processor.getProcessorIdentifier().getName());

        // Get memory information
        GlobalMemory memory = systemInfo.getHardware().getMemory();
        System.out.println("Total Memory: " + formatBytes(memory.getTotal()));
        System.out.println("Available Memory: " + formatBytes(memory.getAvailable()));

        // Get operating system information
        OperatingSystem os = systemInfo.getOperatingSystem();
        System.out.println("Operating System: " + os.toString());
        System.out.println("System Boot Time: " + os.getSystemBootTime());
    }

    // Format bytes into a readable format
    private static String formatBytes(long bytes) {
        if (bytes < 1024) return bytes + " B";
        int exp = (int) (Math.log(bytes) / Math.log(1024));
        char pre = "KMGTPE".charAt(exp - 1);
        return String.format("%.1f %sB", bytes / Math.pow(1024, exp), pre);
    }
}

总结

OSHI是一个功能强大且易于使用的Java库,适用于需要获取系统硬件和操作系统信息的各种应用场景。通过OSHI,开发人员可以轻松地实现系统监控、性能分析、硬件信息收集等功能。其跨平台的特性使得它在不同操作系统上都能稳定运行,是开发系统工具的理想选择。

正文到此结束
Loading...