大家好,我是撸码撸得头晕的开源大叔。
之前大叔一直在维护公司内部使用的服务监控系统,不过因为有新的开发任务,所以需要暂时把手里这套系统交接给新来的小朋友开发维护了。在交接讲解的过程中,发现对于服务器硬件参数监控的方式,使用了开源的 OSHI。大叔一拍大腿,这是个好东西啊!所以在这里分享给大家。
项目简介
OSHI 是一个基于 JNA(本地)的免费的操作系统和硬件信息库,专为 Java 设计。它可以跨平台的获取系统信息以及硬件信息,如操作系统版本、进程、内存和 CPU 使用情况、磁盘和分区、设备、传感器等。它不需要安装任何额外的本地库,因此接入起来很方便。
项目使用
Maven 依赖
我们通过配置 Maven 依赖来引入 OSHI,如下所示:
1 2 3 4 5
| <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>6.4.0</version> </dependency>
|
这里注意的是,不同版本的 JDK 环境,需要引用不同版本的包:
- JDK8: oshi-core-6.4.0
- JPMS: oshi-core-java11-6.4.0
- JDK6: oshi-core-3.14.0
简单的例子
在这里大叔写一个简单的例子,包括了一些常用硬件参数的获取,注释已经写的很详细了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public static void main(String[] args) { SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware();
CentralProcessor centralProcessor = hardware.getProcessor(); String name = centralProcessor.getProcessorIdentifier().getName(); int physicalProcessorCount = centralProcessor.getPhysicalProcessorCount(); long[] currentFreq = centralProcessor.getCurrentFreq(); System.out.println("CPU名称:" + name); System.out.println("CPU核心数:" + physicalProcessorCount);
GlobalMemory memory = hardware.getMemory(); long totalOfG = memory.getTotal() / 1024 / 1024 / 1024; long availableOfG = memory.getAvailable() / 1024 / 1024 / 1024; System.out.println("内存总大小:" + totalOfG + "G"); System.out.println("内存可用大小:" + availableOfG + "G");
List<HWDiskStore> diskStores = hardware.getDiskStores(); long total = diskStores.stream().mapToLong(HWDiskStore::getSize).sum(); System.out.println("磁盘总大小:" + total / 1024 / 1024 / 1024 + "G");
long uptimeInSeconds = systemInfo.getOperatingSystem().getSystemUptime(); System.out.println("系统运行时间:" + uptimeInSeconds / 3600 + "小时"); }
|
在本地运行之后输出如下:
一个漂亮的仪表盘
看过上面的例子,你会发现 OSHI 其实很好用吧。但是只有一个例子的展示大家应该不太满足,所以大叔我特意找了一个已经开发好的监控工具——Ward。Ward 是一款简单、极简主义的服务器监控工具。它用漂亮的仪表盘的形式来展示系统的硬件信息。如图所示:
其实 Ward 是一个很简单的 springboot 项目,借助于该项目,简单阅读下源码就能更好的理解 OSHI 的使用啦。
总结
今天给大家介绍了 OSHI 的使用方式,以及另一个使用 OSHI 的 Web 服务。感兴趣的朋友们可以亲自体验一下哈,项目地址都放到下面了:
1 2 3 4
| -- OSHI https: -- Ward https:
|