系统监控
#介绍
主要功能 操作系统 cpu 内存 jvm 系统 数据查询 等,该模块核心是集成oshi实现对服务器及应用的监控。
第三方组件 oshi(opens new window)是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。
oshi(OSHI 是一个免费的基于 JNA(本机)的 Java 操作系统和硬件信息库。它不需要安装任何额外的本地库,旨在提供跨平台实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。)
#安装
- Maven
```java
com.aizuda aizuda-monitor 1.0.0
- Gradle```javaimplementation 'com.aizuda:aizuda-monitor:1.0.0'
#演示效果
#SpringBoot使用
案例代码
@RequestMapping("/v1/monitor")public class MonitorController {// 注入监控模块 Oshi 调用类@Resourceprivate OshiMonitor oshiMonitor;@PostMapping("/server")public Map<String, Object> monitor() {Map<String, Object> server = new HashMap<>(5);// 系统信息server.put("sysInfo", oshiMonitor.getSysInfo());// CPU 信息server.put("cupInfo", oshiMonitor.getCpuInfo());// 内存信息server.put("memoryInfo", oshiMonitor.getMemoryInfo());// Jvm 虚拟机信息server.put("jvmInfo", oshiMonitor.getJvmInfo());// 磁盘信息List<DiskInfo> diskInfos = oshiMonitor.getDiskInfos();server.put("diskInfos", diskInfos);if (CollectionUtils.isNotEmpty(diskInfos)) {long usableSpace = 0;long totalSpace = 0;for (DiskInfo diskInfo : diskInfos) {usableSpace += diskInfo.getUsableSpace();totalSpace += diskInfo.getTotalSpace();}double usedSize = (totalSpace - usableSpace);// 统计所有磁盘的使用率server.put("diskUsePercent", oshiMonitor.formatDouble(usedSize / totalSpace * 100));}// 系统前 10 个进程List<OSProcess> processList = oshiMonitor.getOperatingSystem().getProcesses(null,OperatingSystem.ProcessSorting.CPU_DESC, 10);List<Map<String, Object>> processMapList = new ArrayList<>();for (OSProcess process : processList) {Map<String, Object> processMap = new HashMap<>(5);processMap.put("name", process.getName());processMap.put("pid", process.getProcessID());processMap.put("cpu", oshiMonitor.formatDouble(process.getProcessCpuLoadCumulative()));processMapList.add(processMap);}server.put("processList", processMapList);return server;}}
#属性说明
#操作系统信息 SysInfo
:::
| 属性 | 说明 |
|---|---|
| name | 系统名称 |
| ip | 系统 ip |
| osName | 操作系统 |
| userDir | 项目路径 |
#CPU信息 CpuInfo
:::
| 属性 | 说明 |
|---|---|
| physicalProcessorCount | 物理处理器数量 |
| logicalProcessorCount | 逻辑处理器数量 |
| systemPercent | 系统使用率 |
| userPercent | 用户使用率 |
| waitPercent | 当前等待率 |
| usePercent | 当前使用率 |
#磁盘信息 DiskInfo
:::
| 属性 | 说明 |
|---|---|
| name | 磁盘名称 |
| volume | 文件系统的卷名 |
| label | 标签 |
| logicalVolume | 文件系统的逻辑卷名 |
| mount | 文件系统的挂载点 |
| description | 文件系统的描述 |
| options | 文件系统的选项 |
| type | 文件系统的类型(FAT、NTFS、etx2、ext4等) |
| UUID | UUID/GUID |
| size | 分区大小(字符串类型,例如 1GB) |
| totalSpace | 分区大小(Long类型原始值) |
| used | 已使用(Long类型原始值) |
| usableSpace | 已使用(Long类型原始值) |
| avail | 已使用(字符串类型,例如 1GB) |
| usePercent | 已使用百分比 |
#JVM虚拟机信息 JvmInfo
:::
| 属性 | 说明 |
|---|---|
| jdkVersion | jdk版本 |
| jdkHome | jdk安装目录 |
| jdkName | jdk名称 |
| jvmTotalMemory | 总内存 |
| maxMemory | Java虚拟机将尝试使用的最大内存量 |
| freeMemory | 空闲内存 |
| usedMemory | 已使用内存 |
| usePercent | 内存使用率 |
| startTime | 返回Java虚拟机的启动时间(毫秒)。此属性返回Java虚拟机启动的大致时间。 |
| size | 分区大小(字符串类型,例如 1GB) |
| uptime | 返回Java虚拟机的正常运行时间(毫秒) |
#系统内存信息 MemoryInfo
:::
| 属性 | 说明 |
|---|---|
| total | 总计内存 |
| used | 已使用内存 |
| free | 未使用内存 |
| usePercent | 使用率 |
#网络带宽信息 NetIoInfo
:::
| 属性 | 说明 |
|---|---|
| rxpck | 每秒钟接收的数据包,rxpck/s |
| txpck | 每秒钟发送的数据包,txpck/s |
| rxbyt | 每秒钟接收的KB数,rxkB/s |
| txbyt | 每秒钟发送的KB数,txkB/s |
