• 系统监控
    • #介绍">#介绍
    • #安装">#安装
    • #演示效果">#演示效果
    • #SpringBoot使用">#SpringBoot使用
  • #属性说明">#属性说明
    • #操作系统信息 SysInfo">#操作系统信息 SysInfo
    • #CPU信息 CpuInfo">#CPU信息 CpuInfo
    • #磁盘信息 DiskInfo">#磁盘信息 DiskInfo
    • #JVM虚拟机信息 JvmInfo">#JVM虚拟机信息 JvmInfo
    • #系统内存信息 MemoryInfo">#系统内存信息 MemoryInfo
    • #网络带宽信息 NetIoInfo">#网络带宽信息 NetIoInfo

    系统监控

    #介绍

    主要功能 操作系统 cpu 内存 jvm 系统 数据查询 等,该模块核心是集成oshi实现对服务器及应用的监控。
    第三方组件 oshi(opens new window)是基于 JNA 的(本地)操作系统和硬件信息库。它不需要安装任何其他额外的本地库,旨在提供一种跨平台的实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。
    oshi(OSHI 是一个免费的基于 JNA(本机)的 Java 操作系统和硬件信息库。它不需要安装任何额外的本地库,旨在提供跨平台实现来检索系统信息,例如操作系统版本、进程、内存和 CPU 使用率、磁盘和分区、设备、传感器等。)

    #安装

    • Maven ```java com.aizuda aizuda-monitor 1.0.0
    1. - Gradle
    2. ```java
    3. implementation 'com.aizuda:aizuda-monitor:1.0.0'

    #演示效果

    系统监控 - 图1

    #SpringBoot使用

    案例代码

    1. @RequestMapping("/v1/monitor")
    2. public class MonitorController {
    3. // 注入监控模块 Oshi 调用类
    4. @Resource
    5. private OshiMonitor oshiMonitor;
    6. @PostMapping("/server")
    7. public Map<String, Object> monitor() {
    8. Map<String, Object> server = new HashMap<>(5);
    9. // 系统信息
    10. server.put("sysInfo", oshiMonitor.getSysInfo());
    11. // CPU 信息
    12. server.put("cupInfo", oshiMonitor.getCpuInfo());
    13. // 内存信息
    14. server.put("memoryInfo", oshiMonitor.getMemoryInfo());
    15. // Jvm 虚拟机信息
    16. server.put("jvmInfo", oshiMonitor.getJvmInfo());
    17. // 磁盘信息
    18. List<DiskInfo> diskInfos = oshiMonitor.getDiskInfos();
    19. server.put("diskInfos", diskInfos);
    20. if (CollectionUtils.isNotEmpty(diskInfos)) {
    21. long usableSpace = 0;
    22. long totalSpace = 0;
    23. for (DiskInfo diskInfo : diskInfos) {
    24. usableSpace += diskInfo.getUsableSpace();
    25. totalSpace += diskInfo.getTotalSpace();
    26. }
    27. double usedSize = (totalSpace - usableSpace);
    28. // 统计所有磁盘的使用率
    29. server.put("diskUsePercent", oshiMonitor.formatDouble(usedSize / totalSpace * 100));
    30. }
    31. // 系统前 10 个进程
    32. List<OSProcess> processList = oshiMonitor.getOperatingSystem().getProcesses(null,
    33. OperatingSystem.ProcessSorting.CPU_DESC, 10);
    34. List<Map<String, Object>> processMapList = new ArrayList<>();
    35. for (OSProcess process : processList) {
    36. Map<String, Object> processMap = new HashMap<>(5);
    37. processMap.put("name", process.getName());
    38. processMap.put("pid", process.getProcessID());
    39. processMap.put("cpu", oshiMonitor.formatDouble(process.getProcessCpuLoadCumulative()));
    40. processMapList.add(processMap);
    41. }
    42. server.put("processList", processMapList);
    43. return server;
    44. }
    45. }

    #属性说明

    #操作系统信息 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