服务器性能监控,就靠它了!


大家好,我是撸码撸得头晕的开源大叔。

之前大叔一直在维护公司内部使用的服务监控系统,不过因为有新的开发任务,所以需要暂时把手里这套系统交接给新来的小朋友开发维护了。在交接讲解的过程中,发现对于服务器硬件参数监控的方式,使用了开源的 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();

// CPU信息
CentralProcessor centralProcessor = hardware.getProcessor();
// 获取CPU名称
String name = centralProcessor.getProcessorIdentifier().getName();
// 获取CPU核心数
int physicalProcessorCount = centralProcessor.getPhysicalProcessorCount();
// 获取当前CPU每个核心的频率
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://github.com/oshi/oshi
-- Ward
https://github.com/Rudolf-Barbu/Ward

文章作者: 开源小分队
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 开源小分队 !
  目录