Skip to content
广告❤️成为赞助商

介绍

主要功能 操作系统 cpu 内存 jvm 系统 数据查询 等,该模块核心是集成oshi实现对服务器及应用的监控。

第三方组件 oshi 是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。

安装

  • Maven
xml
<dependency>
  <groupId>com.aizuda</groupId>
  <artifactId>aizuda-monitor</artifactId>
  <version>1.0.0</version>
</dependency>
  • Gradle
xml
implementation 'com.aizuda:aizuda-monitor:1.0.0'

演示效果

演示效果

SpringBoot使用

案例代码

javascript
@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等)
UUIDUUID/GUID
size分区大小(字符串类型,例如 1GB)
totalSpace分区大小(Long类型原始值)
used已使用(Long类型原始值)
usableSpace已使用(Long类型原始值)
avail已使用(字符串类型,例如 1GB)
usePercent已使用百分比

JVM虚拟机信息 JvmInfo

属性说明
jdkVersionjdk版本
jdkHomejdk安装目录
jdkNamejdk名称
jvmTotalMemory总内存
maxMemoryJava虚拟机将尝试使用的最大内存量
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

每个人都是架构师