介绍
对服务器的硬件、软件和网络进行实时监控和管理,以确保服务器的性能、稳定性和安全性。它涉及到对服务器各个方面的监控,包括但不限于CPU、内存、硬盘、网络、进程、服务等。通过这些监控,可以及时发现和解决潜在问题,从而避免服务器崩溃、性能下降或安全漏洞。
依赖
Oshi是一个免费的基于JNA的获取操作系统和硬件信息的java库,Github地址是:oshi(opens new window)
它的优点是不需要安装任何其他本机库,并且旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本,进程,内存和CPU使用率,磁盘和分区,设备,传感器等。
这个库可以监测的内容包括:
计算机系统和固件,底板
操作系统和版本/内部版本
物理(核心)和逻辑(超线程)CPU,处理器组,NUMA节点
系统和每个处理器的负载百分比和滴答计数器
CPU正常运行时间,进程和线程
进程正常运行时间,CPU,内存使用率,用户/组,命令行
已使用/可用的物理和虚拟内存
挂载的文件系统(类型,可用空间和总空间)
磁盘驱动器(型号,序列号,大小)和分区
网络接口(IP,带宽输入/输出)
电池状态(电量百分比,剩余时间,电量使用情况统计信息)
连接的显示器(带有EDID信息)
USB设备
传感器(温度,风扇速度,电压)
也就是说配合一个前端界面,完全可以搞定系统监控了。
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.38</version>
</dependency>
实体类
@Data
public class SystemRuntimeInfo {
/**
* java信息
*/
private JvmSpecInfo jvm;
/**
* 系统信息
*/
private OsInfo systemInfo;
/**
* 网络信息
*/
private List<NetworkIF> networkInfo;
/**
* 用户信息
*/
private UserInfo userInfo;
/**
* cpu信息
*/
private CpuInfo cpuInfo;
/**
* 内存信息
*/
private GlobalMemory memoryInfo;
/**
* 磁盘信息
*/
private List<HWDiskStore> diskList;
}
系统调用
@GetMapping("/info")
public R getInfo(){
// 创建一个SystemRuntimeInfo对象,用于存储系统运行信息
SystemRuntimeInfo sys = new SystemRuntimeInfo();
// 设置网络信息,通过OshiUtil工具类获取网络接口信息
sys.setNetworkInfo(OshiUtil.getNetworkIFs());
// 设置用户信息,通过SystemUtil工具类获取当前用户信息
sys.setUserInfo(SystemUtil.getUserInfo());
// 设置CPU信息,通过OshiUtil工具类获取CPU相关信息
sys.setCpuInfo(OshiUtil.getCpuInfo());
// 设置内存信息,通过OshiUtil工具类获取内存相关信息
sys.setMemoryInfo(OshiUtil.getMemory());
// 设置磁盘信息,通过OshiUtil工具类获取磁盘存储相关信息
sys.setDiskList(OshiUtil.getDiskStores());
// 设置系统信息,通过SystemUtil工具类获取操作系统相关信息
sys.setSystemInfo(SystemUtil.getOsInfo());
// 设置JVM信息,通过SystemUtil工具类获取JVM规格信息
sys.setJvm(SystemUtil.getJvmSpecInfo());
// 返回成功的响应,包含系统运行信息
return R.success("获取成功", sys);
}
返回结果
{
"msg": "获取成功", // 获取数据的消息,表示成功
"code": 200, // 状态码,200表示请求成功
"data": {
"jvm": { // JVM 信息(Java 虚拟机)
"name": "Java Virtual Machine Specification", // JVM 名称
"version": "1.8", // JVM 版本
"vendor": "Oracle Corporation" // JVM 供应商
},
"systemInfo": { // 系统信息
"name": "Windows 10", // 操作系统名称
"pathSeparator": ";", // 系统路径分隔符
"version": "10.0", // 操作系统版本
"windows": true, // 是否为 Windows 操作系统
"mac": false, // 是否为 Mac 操作系统
"linux": false, // 是否为 Linux 操作系统
"solaris": false, // 是否为 Solaris 操作系统
"macOsX": false, // 是否为 MacOSX 操作系统
"windows10": true, // 是否为 Windows 10 操作系统
"fileSeparator": "\\", // 文件分隔符
"arch": "amd64", // 系统架构
"lineSeparator": "\r\n", // 换行符
"irix": false, // 是否为 IRIX 操作系统
"windowsXP": false, // 是否为 Windows XP 操作系统
"windows95": false, // 是否为 Windows 95 操作系统
"windowsNT": false, // 是否为 Windows NT 操作系统
"windows8": false, // 是否为 Windows 8 操作系统
"windows8_1": false, // 是否为 Windows 8.1 操作系统
"windowsME": false, // 是否为 Windows ME 操作系统
"windows2000": false, // 是否为 Windows 2000 操作系统
"windows7": false // 是否为 Windows 7 操作系统
},
"networkInfo": [ // 网络信息
{
"name": "wlan0", // 网络接口名称
"displayName": "Microsoft Wi-Fi Direct Virtual Adapter #3", // 显示的适配器名称
"index": 6, // 网络接口的索引
"mtu": 1500, // 最大传输单元
"ifType": 71, // 接口类型
"macaddr": "10:5f:ad:ea:44:ef", // MAC 地址
"ipv6addr": ["fe80:0:0:0:b61d:ae2f:9575:d731"], // IPv6 地址
"ifAlias": "本地连接* 11", // 网络接口的别名
"ifOperStatus": "DOWN" // 接口状态,DOWN表示未启用
},
{
"name": "wlan1", // 网络接口名称
"displayName": "Microsoft Wi-Fi Direct Virtual Adapter #4", // 显示的适配器名称
"index": 10, // 网络接口的索引
"mtu": 1500, // 最大传输单元
"ifType": 71, // 接口类型
"macaddr": "12:5f:ad:ea:44:ee", // MAC 地址
"ipv6addr": ["fe80:0:0:0:bf9c:7f64:1b03:fac2"], // IPv6 地址
"ifAlias": "本地连接* 12", // 网络接口的别名
"ifOperStatus": "DOWN" // 接口状态,DOWN表示未启用
},
{
"name": "eth5", // 网络接口名称
"displayName": "VMware Virtual Ethernet Adapter for VMnet8", // 显示的适配器名称
"index": 17, // 网络接口的索引
"mtu": 1500, // 最大传输单元
"subnetMasks": [24], // 子网掩码
"ipv4addr": ["172.23.4.1"], // IPv4 地址
"ipv6addr": ["fe80:0:0:0:317b:6964:e456:cf2e"], // IPv6 地址
"ifAlias": "VMware Network Adapter VMnet8", // 网络接口的别名
"ifOperStatus": "UP" // 接口状态,UP表示已启用
},
{
"name": "wlan3", // 网络接口名称
"displayName": "Intel(R) Wi-Fi 6 AX101 #2", // 显示的适配器名称
"index": 18, // 网络接口的索引
"mtu": 1500, // 最大传输单元
"ipv4addr": ["192.168.1.101"], // IPv4 地址
"ipv6addr": ["fe80:0:0:0:5877:550d:1ad8:ec56"], // IPv6 地址
"ifAlias": "WLAN 2", // 网络接口的别名
"ifOperStatus": "UP" // 接口状态,UP表示已启用
}
],
"userInfo": { // 用户信息
"name": "13169", // 用户名
"language": "zh", // 语言
"country": "CN", // 国家
"tempDir": "C:\\Users\\13169\\AppData\\Local\\Temp\\", // 临时目录
"homeDir": "C:\\Users\\13169\\", // 用户主目录
"currentDir": "C:\\Users\\13169\\Desktop\\r-test\\" // 当前工作目录
},
"cpuInfo": { // CPU 信息
"cpuNum": 16, // CPU 核心数量
"cpuModel": "13th Gen Intel(R) Core(TM) i7-13620H\n 1 physical CPU package(s)\n 10 physical CPU core(s) (6 performance + 4 efficiency)\n 16 logical CPU(s)", // CPU 型号
"used": 1.33, // CPU 使用率
"free": 98.67, // 剩余空闲CPU百分比
"sys": 0.57, // 系统占用CPU百分比
"user": 0.76 // 用户占用CPU百分比
},
"memoryInfo": { // 内存信息
"total": 34075996160, // 总内存(字节)
"available": 19033587712, // 可用内存(字节)
"virtualMemory": { // 虚拟内存信息
"swapTotal": 2147483648, // 交换区总量
"swapUsed": 98865152, // 已使用的交换区
"swapPagesIn": 51135606, // 交换页面输入次数
"swapPagesOut": 254378 // 交换页面输出次数
},
"physicalMemory": [ // 物理内存信息
{
"bankLabel": "BANK 0", // 内存槽标签
"capacity": 17179869184, // 内存容量(字节)
"clockSpeed": 5600000000, // 内存时钟频率(赫兹)
"manufacturer": "Crucial Technology", // 内存制造商
"memoryType": "Unknown" // 内存类型
},
{
"bankLabel": "BANK 0", // 内存槽标签
"capacity": 17179869184, // 内存容量(字节)
"clockSpeed": 4800000000, // 内存时钟频率(赫兹)
"manufacturer": "Samsung", // 内存制造商
"memoryType": "Unknown" // 内存类型
}
]
},
"diskList": [ // 硬盘信息
{
"name": "\\\\.\\PHYSICALDRIVE0", // 硬盘名称
"model": "YMTC PC41Q-512GB-B (标准磁盘驱动器)", // 硬盘型号
"size": 512105932800, // 硬盘总大小(字节)
"reads": 3909972, // 读取操作次数
"writes": 12091183, // 写入操作次数
"writeBytes": 343877037056, // 写入的字节数
"readBytes": 159831356928, // 读取的字节数
"partitions": [ // 硬盘分区信息
{
"name": "GPT: Basic Data", // 分区名称
"size": 107381522432, // 分区大小(字节)
"mountPoint": "C:\\" // 挂载点
},
{
"name": "GPT: Basic Data", // 分区名称
"size": 403661914112, // 分区大小(字节)
"mountPoint": "D:\\" // 挂载点
}
]
}
]
}
}