当前位置: 首页 > news >正文

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:\\"  // 挂载点}]}]}
}

相关文章:

  • JVM 内存、JMM内存与集群机器节点内存的联系
  • aardio 继承与多态
  • 关于 WASM: WASM + JS 混合逆向流程
  • 7. TypeScript接口
  • Python数据结构与算法(6.1)——树
  • 鸿蒙网络编程系列53-仓颉版TCP连接超时分析示例
  • python中的文件操作处理:文本文件的处理、二进制文件的处理
  • Android音视频多媒体开源框架基础大全
  • 基于Docker实现frp之snowdreamtech/frps
  • window显示驱动开发—为 DirectX VA 2.0 扩展模式提供功能(一)
  • 【JVM】- 类加载与字节码结构1
  • Spring AI详细使用教程:从入门到精通
  • RabbitMQ缓存详解:由来、发展、核心场景与实战应用
  • ubuntu之坑(十四)——安装FFmpeg进行本地视频推流(在海思平台上运行)
  • 软件工程的实践
  • ffmpeg subtitles 字幕不换行的问题解决方案
  • Yarn与NPM缓存存储目录迁移
  • MySQL查询缓存深度剖析
  • ffmpeg rtmp推流源码分析
  • 3GPP协议PDF下载
  • 西安招聘网/网页优化包括
  • 青岛网站备案/发稿网
  • 大凤号 网站建设/网站推广优化排名教程
  • 珠海网站建设有限公司/舆情监测系统
  • 微信里的小程序怎么制作方法/运营推广seo招聘
  • 网站建设大概/百度seo建议