OSHI是Java的免费基于JNA的(本机)操作系统和硬件信息库。它不需要安装任何其他本机库,并且旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本,进程,内存和CPU使用率,磁盘和分区,设备,传感器等。
使用OSHI我们可以对应用程序进行监控,可以对应用程序所在的服务器资源进行监控,可以监控到很多的指标,如下:
1、计算机系统和固件,底板
2、操作系统和版本/内部版本
3、物理(核心)和逻辑(超线程)CPU,处理器组,NUMA节点
4、系统和每个处理器的负载百分比和滴答计数器
5、CPU正常运行时间,进程和线程
6、进程正常运行时间,CPU,内存使用率,用户/组,命令行
7、已使用/可用的物理和虚拟内存
8、挂载的文件系统(类型,可用空间和总空间)
9、磁盘驱动器(型号,序列号,大小)和分区
10、网络接口(IP,带宽输入/输出)
11、电池状态(电量百分比,剩余时间,电量使用情况统计信息)
12、连接的显示器(带有EDID信息)
13、USB设备
14、传感器(温度,风扇速度,电压)
上面这些指标,很多都不是很懂,不过我们可以参考oshi的api进行相应的操作:http://oshi.github.io/oshi/apidocs/
我们使用java程序集成oshi后,对指标数据进行处理,可以得到一些好看的应用图表,如:
![5f91a21bc61b64469a814c00907c9777.png](https://img-blog.csdnimg.cn/img_convert/5f91a21bc61b64469a814c00907c9777.png)
在实际项目中,对系统的监控我们更多的是采用第三方工具,比如Prometheus等,这个在下一章节中讲解;
我们在SpringBoot工程中,引入以下配置文件
<!-- 获取系统信息 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>3.9.1</version>
</dependency>
<!--工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.5.2</version>
</dependency>
我们在引入了以上配置文件后,先不要着急写代码,先检查一下项目中引入进来的jar包;打开IDEA的External Libraries功能(在项目Project的最下方),检查一下已经引入的jar包,需要保证的是引入的net.java.dev.jna:jna 包引入的不等于4.2.2,否则在调用方法进行查询的时候就会报错
java.lang.NoSuchMethodError:
com.sun.jna.platform.win32.WinNT$FILE_NOTIFY_INFORMATION.createFieldsOrder
([Ljava/lang/String;)Ljava/util/List;
之前在集成的时候遇到了很多的问题,参考了网上很多的答案,同时也收获到了更多不同的异常日志;
![8c98fa0b44f6698c2824f78362803993.png](https://img-blog.csdnimg.cn/img_convert/8c98fa0b44f6698c2824f78362803993.png)
最后才发现,只要把net.java.dev.jna:jna包的版本号控制住了,其他的就都好说了;在上述我引入的是net.java.dev.jna:jna包,另外,还有一个jar其实可以引入的,大家可以根据自己在引入包后实际产生的情况进行合理安排,实现项目中只有一个net.java.dev.jna:jna包并且这个包的版本号不是 4.2.2即可;
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platf