SpringBoot 服务器监控 监控系统开销 获取服务器系统的信息用户信息 运行信息 保持稳定
介绍
对服务器的硬件、软件和网络进行实时监控和管理,以确保服务器的性能、稳定性和安全性。它涉及到对服务器各个方面的监控,包括但不限于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:\\" // 挂载点}]}]}
}