如何快速掌握OSHI硬件监控:Java系统信息获取终极指南 [特殊字符]

张开发
2026/5/4 4:21:13 15 分钟阅读
如何快速掌握OSHI硬件监控:Java系统信息获取终极指南 [特殊字符]
如何快速掌握OSHI硬件监控Java系统信息获取终极指南 【免费下载链接】oshiNative Operating System and Hardware Information项目地址: https://gitcode.com/gh_mirrors/os/oshi想要在 Java 应用中轻松获取系统硬件信息吗OSHIOperating System and Hardware Information是一个强大的跨平台 Java 库专门用于获取操作系统和硬件信息。无论您是开发系统监控工具、性能分析应用还是需要获取服务器状态信息OSHI 都能为您提供完整解决方案。本文将为您提供 OSHI 硬件监控的完整指南帮助您快速掌握这个强大的工具。 OSHI 硬件监控的核心功能OSHI 是一个基于 JNAJava Native Access的免费库无需安装任何额外的本地库即可获取全面的系统信息。它支持 Windows、macOS、Linux 和 UNIX 系统提供了丰富的硬件监控功能。主要监控能力包括计算机系统和固件信息获取主板、BIOS/UEFI 固件等详细信息操作系统信息操作系统版本、构建信息等CPU 监控物理核心、逻辑处理器、处理器组、NUMA 节点、系统负载、使用率统计内存监控物理内存和虚拟内存的使用情况磁盘和分区磁盘型号、序列号、大小、读写统计网络接口IP 地址、带宽统计、网络参数、TCP/UDP 统计电池状态剩余容量百分比、剩余时间、功耗统计USB 设备连接的 USB 设备树显示器和显卡连接显示器的 EDID 信息、显卡详情传感器数据温度、风扇速度、电压部分硬件支持打印机信息打印机名称、状态、驱动程序️ OSHI 快速入门指南环境准备与依赖添加要在项目中使用 OSHI首先需要添加相应的依赖。根据您的 JDK 版本选择合适的模块Maven 配置!-- 对于 JDK 8 -- dependency groupIdcom.github.oshi/groupId artifactIdoshi-core/artifactId version6.11.0/version /dependency !-- 对于 Java 11 模块化项目 -- dependency groupIdcom.github.oshi/groupId artifactIdoshi-core-java11/artifactId version6.11.0/version /dependency !-- 对于 Java 25 使用 FFM API -- dependency groupIdcom.github.oshi/groupId artifactIdoshi-core-java25/artifactId version6.11.0/version /dependencyGradle 配置// 对于 JDK 8 implementation com.github.oshi:oshi-core:6.11.0 // 对于 Java 11 模块化项目 implementation com.github.oshi:oshi-core-java11:6.11.0 // 对于 Java 25 使用 FFM API implementation com.github.oshi:oshi-core-java25:6.11.0基础使用示例开始使用 OSHI 非常简单只需几行代码即可获取系统信息import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; import oshi.hardware.CentralProcessor; import oshi.hardware.GlobalMemory; public class OshiDemo { public static void main(String[] args) { // 创建 SystemInfo 实例 SystemInfo si new SystemInfo(); // 获取硬件抽象层 HardwareAbstractionLayer hal si.getHardware(); // 获取 CPU 信息 CentralProcessor cpu hal.getProcessor(); System.out.println(CPU: cpu.getProcessorIdentifier().getName()); System.out.println(逻辑处理器数: cpu.getLogicalProcessorCount()); System.out.println(物理核心数: cpu.getPhysicalProcessorCount()); // 获取内存信息 GlobalMemory memory hal.getMemory(); System.out.println(总内存: memory.getTotal()); System.out.println(可用内存: memory.getAvailable()); System.out.println(已使用内存: (memory.getTotal() - memory.getAvailable())); } } OSHI 高级功能详解跨平台硬件监控实现OSHI 的强大之处在于其跨平台支持。项目结构清晰地展示了不同平台的实现Windows 平台实现oshi-core/src/main/java/oshi/hardware/platform/windows/Linux 平台实现oshi-core/src/main/java/oshi/hardware/platform/linux/macOS 平台实现oshi-core/src/main/java/oshi/hardware/platform/mac/UNIX 平台实现oshi-core/src/main/java/oshi/hardware/platform/unix/每个平台都有专门的实现类确保在不同操作系统上都能准确获取硬件信息。实时监控与性能统计OSHI 支持实时监控系统性能指标// 获取 CPU 使用率统计 long[] prevTicks cpu.getSystemCpuLoadTicks(); // 等待一段时间 Thread.sleep(1000); long[] ticks cpu.getSystemCpuLoadTicks(); // 计算 CPU 使用率 long user ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()]; long nice ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()]; long system ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()]; long idle ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()]; long iowait ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.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 totalCpu user nice system idle iowait irq softirq steal; double cpuUsage 100.0 * (totalCpu - idle) / totalCpu; System.out.printf(CPU 使用率: %.2f%%\n, cpuUsage);磁盘和文件系统监控OSHI 提供详细的磁盘和文件系统信息// 获取磁盘信息 ListHWDiskStore diskStores hal.getDiskStores(); for (HWDiskStore disk : diskStores) { System.out.println(磁盘: disk.getName()); System.out.println( 型号: disk.getModel()); System.out.println( 序列号: disk.getSerial()); System.out.println( 大小: disk.getSize() bytes); System.out.println( 读取次数: disk.getReads()); System.out.println( 写入次数: disk.getWrites()); // 获取分区信息 ListHWPartition partitions disk.getPartitions(); for (HWPartition part : partitions) { System.out.println( 分区: part.getName() 类型: part.getType() 挂载点: part.getMountPoint()); } } OSHI 在实际项目中的应用系统监控仪表板您可以使用 OSHI 构建实时系统监控仪表板。项目中的oshi-demo模块包含了 GUI 示例图形界面示例oshi-demo/src/main/java/oshi/demo/gui/目录包含完整的 Swing GUI 实现Web 服务器示例oshi-demo/src/main/java/oshi/demo/OshiHTTPServer.java展示了如何通过 HTTP 提供系统信息JSON 输出示例oshi-demo/src/main/java/oshi/demo/Json.java演示了如何将 OSHI 数据转换为 JSON 格式JMX 集成监控OSHI 还支持通过 JMXJava Management Extensions暴露系统信息// JMX 集成示例 import oshi.demo.jmx.JMXOshiAgent; public class JMXMonitor { public static void main(String[] args) throws Exception { // 创建 JMX 代理 JMXOshiAgent agent new JMXOshiAgent(); agent.start(); System.out.println(OSHI JMX 代理已启动); System.out.println(通过 JMX 客户端连接查看系统信息); // 保持运行 Thread.sleep(Long.MAX_VALUE); } }GPU 监控功能对于需要监控 GPU 性能的应用OSHI 提供了 GPU 统计功能import oshi.hardware.GraphicsCard; import oshi.hardware.GpuStats; // 获取显卡信息 ListGraphicsCard graphicsCards hal.getGraphicsCards(); for (GraphicsCard card : graphicsCards) { System.out.println(显卡: card.getName()); System.out.println( 厂商: card.getVendor()); System.out.println( 设备ID: card.getDeviceId()); System.out.println( 版本: card.getVersionInfo()); // 创建 GPU 统计会话 try (GpuStats gpuStats card.createStatsSession()) { GpuTicks ticks gpuStats.getGpuTicks(); System.out.println( GPU 使用率统计: ticks); } } OSHI 性能优化技巧配置全局设置OSHI 提供了灵活的配置选项可以通过oshi.properties文件或GlobalConfig类进行配置import oshi.util.GlobalConfig; // 配置 OSHI 全局设置 GlobalConfig.set(GlobalConfig.OSHI_UTIL_MEMOIZER_ENABLED, true); GlobalConfig.set(GlobalConfig.OSHI_UTIL_MEMOIZER_EXPIRATION, 60); // 或者通过系统属性 System.setProperty(oshi.util.memoizer.enabled, true); System.setProperty(oshi.util.memoizer.expiration, 60);使用备忘录模式提高性能OSHI 内置了Memoizer工具类可以缓存昂贵的操作结果import oshi.util.Memoizer; import java.util.function.Supplier; // 创建昂贵的计算函数 SupplierExpensiveData expensiveOperation () - { // 执行昂贵的硬件查询操作 return computeExpensiveData(); }; // 使用备忘录包装结果将被缓存 SupplierExpensiveData memoized Memoizer.memoize(expensiveOperation, 60); // 多次调用只有第一次会真正计算 ExpensiveData data1 memoized.get(); // 实际计算 ExpensiveData data2 memoized.get(); // 从缓存返回异步数据采集对于实时监控应用建议使用异步方式采集数据import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class AsyncMonitor { private final ScheduledExecutorService scheduler Executors.newScheduledThreadPool(1); private final SystemInfo si new SystemInfo(); private final HardwareAbstractionLayer hal si.getHardware(); public void startMonitoring() { scheduler.scheduleAtFixedRate(() - { try { // 采集系统指标 collectSystemMetrics(); } catch (Exception e) { System.err.println(监控数据采集失败: e.getMessage()); } }, 0, 5, TimeUnit.SECONDS); // 每5秒采集一次 } private void collectSystemMetrics() { // 采集 CPU、内存、磁盘、网络等指标 CentralProcessor cpu hal.getProcessor(); GlobalMemory memory hal.getMemory(); // 处理采集到的数据 System.out.println(CPU 负载: cpu.getSystemCpuLoad()); System.out.println(内存使用率: (1.0 - (double)memory.getAvailable() / memory.getTotal())); } } 故障排除与最佳实践常见问题解决JNA 类找不到错误确保正确添加了 JNA 依赖权限问题在某些系统上可能需要管理员/root 权限平台特定问题检查是否在支持的操作系统上运行性能监控最佳实践合理设置采样间隔根据需求调整数据采集频率使用合适的缓存策略利用 Memoizer 减少重复查询错误处理妥善处理硬件查询可能抛出的异常资源清理及时关闭 GpuStats 等需要清理的资源扩展 OSHI 功能OSHI 的设计允许轻松扩展。您可以创建自定义的平台实现或添加新的硬件监控功能// 自定义硬件监控扩展示例 public class CustomHardwareMonitor extends AbstractHardwareAbstractionLayer { Override public ComputerSystem createComputerSystem() { // 自定义计算机系统信息获取逻辑 return new CustomComputerSystem(); } Override public CentralProcessor createProcessor() { // 自定义 CPU 信息获取逻辑 return new CustomCentralProcessor(); } // 其他方法的实现... } 总结OSHI 为 Java 开发者提供了一个强大、跨平台的硬件监控解决方案。无论您是开发系统管理工具、性能监控应用还是需要获取详细的硬件信息OSHI 都能满足您的需求。通过本文的指南您应该已经掌握了OSHI 的基本使用方法快速集成到项目中高级监控功能CPU、内存、磁盘、网络等全面监控实际应用场景GUI 仪表板、Web 服务、JMX 集成性能优化技巧配置调优、缓存策略、异步采集故障排除方法常见问题解决和最佳实践现在就开始使用 OSHI为您的 Java 应用添加专业的硬件监控能力吧提示更多示例代码和详细文档可以在项目的oshi-demo模块和src/site/markdown/目录中找到。【免费下载链接】oshiNative Operating System and Hardware Information项目地址: https://gitcode.com/gh_mirrors/os/oshi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章