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

每个人都是架构师