系统监控
#介绍
主要功能 操作系统 cpu 内存 jvm 系统 数据查询 等,该模块核心是集成oshi实现对服务器及应用的监控。
第三方组件 oshi(opens new window)是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。
oshi(OSHI 是一个免费的基于 JNA(本机)的 Java 操作系统和硬件信息库。它不需要安装任何额外的本地库,旨在提供跨平台实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。)
#安装
- Maven
```java
com.aizuda aizuda-monitor 1.0.0
- Gradle
```java
implementation 'com.aizuda:aizuda-monitor:1.0.0'
#演示效果
#SpringBoot使用
案例代码
@RequestMapping("/v1/monitor")
public class MonitorController {
// 注入监控模块 Oshi 调用类
@Resource
private 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 |