Oshi封装 - OshiUtil
# Oshi封装 - OshiUtil
概述
Oshi
是一个免费的基于 JNA 的 Java 库,用于获取操作系统和硬件信息。OshiUtil
是 Hutool 对 Oshi
的封装,提供了更简洁、易用的 API 来获取系统和硬件的相关信息。常见的应用场景包括系统监控、硬件信息采集、性能分析等。
Oshi
支持获取的信息包括但不限于:
- 计算机系统信息(固件、主板)
- 操作系统和版本
- CPU 信息(核心数、线程数、利用率等)
- 内存信息(物理内存、虚拟内存)
- 磁盘信息(磁盘型号、分区信息)
- 网络接口信息
- 传感器信息(温度、风扇速度、电压)
- 其他硬件设备信息(如 USB 设备、显示器)
在开始使用 OshiUtil
之前,需要引入 Oshi
库:
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.4.1</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 1. 获取内存信息
import cn.hutool.system.oshi.OshiUtil;
import oshi.hardware.GlobalMemory;
public class MemoryInfoExample {
public static void main(String[] args) {
// 获取系统内存信息
GlobalMemory memory = OshiUtil.getMemory();
// 获取内存总量(字节)
long totalMemory = memory.getTotal();
// 获取可用内存(字节)
long availableMemory = memory.getAvailable();
// 输出内存信息
System.out.println("内存总量: " + totalMemory / (1024 * 1024) + " MB");
System.out.println("可用内存: " + availableMemory / (1024 * 1024) + " MB");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
输出结果示例:
内存总量: 16384 MB
可用内存: 10240 MB
1
2
2
# 2. 获取 CPU 信息
import cn.hutool.system.oshi.OshiUtil;
import oshi.hardware.CentralProcessor;
import oshi.hardware.CentralProcessor.ProcessorIdentifier;
public class CpuInfoExample {
public static void main(String[] args) {
// 获取 CPU 处理器信息
CentralProcessor processor = OshiUtil.getProcessor();
// 获取处理器标识信息
ProcessorIdentifier identifier = processor.getProcessorIdentifier();
// 输出 CPU 信息
System.out.println("CPU 型号: " + identifier.getName());
System.out.println("物理核心数: " + processor.getPhysicalProcessorCount());
System.out.println("逻辑核心数: " + processor.getLogicalProcessorCount());
System.out.println("CPU 主频: " + identifier.getVendorFreq() / (1024 * 1024 * 1024) + " GHz");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
输出结果示例:
CPU 型号: AMD Ryzen 5 4600U with Radeon Graphics
物理核心数: 6
逻辑核心数: 12
CPU 主频: 3.0 GHz
1
2
3
4
2
3
4
# 3. 获取操作系统信息
import cn.hutool.system.oshi.OshiUtil;
import oshi.software.os.OperatingSystem;
public class OsInfoExample {
public static void main(String[] args) {
// 获取操作系统信息
OperatingSystem os = OshiUtil.getOs();
// 输出操作系统信息
System.out.println("操作系统: " + os.getFamily());
System.out.println("版本: " + os.getVersionInfo().getVersion());
System.out.println("制造商: " + os.getManufacturer());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
输出结果示例:
操作系统: Windows
版本: 10.0
制造商: Microsoft
1
2
3
2
3
# 4. 获取磁盘信息
import cn.hutool.system.oshi.OshiUtil;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.hardware.HWDiskStore;
public class DiskInfoExample {
public static void main(String[] args) {
// 获取硬件抽象层信息
HardwareAbstractionLayer hal = OshiUtil.getHardware();
// 获取磁盘信息
for (HWDiskStore disk : hal.getDiskStores()) {
System.out.println("磁盘名称: " + disk.getName());
System.out.println("磁盘模型: " + disk.getModel());
System.out.println("磁盘大小: " + disk.getSize() / (1024 * 1024 * 1024) + " GB");
System.out.println("磁盘读写次数: " + disk.getReads() + "/" + disk.getWrites());
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
输出结果示例:
磁盘名称: \\.\PhysicalDrive0
磁盘模型: WDC PC SN730 SDBPNTY-512G-1001
磁盘大小: 512 GB
磁盘读写次数: 125000/93000
1
2
3
4
2
3
4
# 5. 实际开发场景
- 系统监控:通过获取 CPU、内存、磁盘和网络信息,可以开发系统监控工具,实时跟踪系统性能。
- 硬件信息采集:在开发需要收集用户硬件信息的软件时,
OshiUtil
提供了快速、跨平台的解决方案。 - 服务器健康检查:在服务器管理中,可以利用这些信息进行自动化的健康检查,判断服务器状态。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08