文章目录

  • Java-SpringBoot-使用Sigar采集设备信息
    • 一、Sigar依赖
    • 二、项目讲解
      • 1. 项目结构图
      • 2. 数据传递实体类
      • 3. Sigar采集类
      • 4. Controller控制类
    • 三、采集失败原因以及解决方法

Java-SpringBoot-使用Sigar采集设备信息

项目要求:
采集设备信息,如CPU、内存、网络等信息,实现对设备的监控。
 
项目开源地址:
Gitee: https://gitee.com/xuhy34324/boot_sigar_acquisition
 
使用 Sigar 前的操作:
在使用 sigar 采集 window 或者 linux 系统信息时,需要在系统中添加 sigar 的指定文件,否则采集报错。(采集OS的没去研究)
具体操作在末尾。

一、Sigar依赖

        <!-- https://mvnrepository.com/artifact/org.fusesource/sigar --><dependency><groupId>org.fusesource</groupId><artifactId>sigar</artifactId><version>1.6.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

二、项目讲解

项目环境:Window10
编译工具:IDEA
使用依赖:Sigar1.6.4、lombok

1. 项目结构图

2. 数据传递实体类

CpuVO.java

@Data
public class CpuVO {private Double user; // 用户CPU使用率private Double sys;  // 系统CPU使用率private Double wait; // 等待率private Double nice; // 错误率private Double idle; // 空闲率private Double combined; // 使用率
}

MemoryVO.java

@Data
public class MemoryVO {private Long memTotal;  // 内存总容量 /kprivate Long memUsed;   // 当前内存使用量 /kprivate Long memFree;   // 当前内存剩余量 /kprivate Long swapTotal; // 交换区总容量 /kprivate Long swapUsed;  // 当前交换区使用量 /kprivate Long swapFree;  // 当前交换区剩余量 /k
}

3. Sigar采集类

SigarLocalDeviceDataAcquisition.java

package com.example.acquisition;import com.example.vo.CpuVO;
import com.example.vo.MemoryVO;
import org.hyperic.sigar.*;import java.util.ArrayList;
import java.util.List;/*** @Author X_HuiYang* @Date 2022/7/21 18:17* @Description*/public class SigarLocalDeviceDataAcquisition {public static Sigar sigar;static {sigar = new Sigar();}/*** 采集本地设备内存数据*/public static MemoryVO getMemory() throws SigarException {// 获取内存数据Mem mem = sigar.getMem();// 内存总容量long memTotal = mem.getTotal();// 内存使用量long memUsed = mem.getUsed();// 内存空闲量long memFree = mem.getFree();// 获取内存交换区数据Swap swap = sigar.getSwap();// 交换区总容量long swapTotal = swap.getTotal();// 交换区使用量long swapUsed = swap.getUsed();// 交换区剩余量long swapFree = swap.getFree();MemoryVO memoryVO = new MemoryVO();// 除以1024,将原始数据单位变成 /kmemoryVO.setMemTotal(memTotal / 1024L);memoryVO.setMemUsed(memUsed / 1024L);memoryVO.setMemFree(memFree / 1024L);memoryVO.setSwapTotal(swapTotal / 1024L);memoryVO.setSwapUsed(swapUsed / 1024L);memoryVO.setSwapFree(swapFree / 1024L);return memoryVO;}/*** 采集本地设备CPU数据*/public static CpuVO getCpu() throws SigarException {// 获取设备总CPU数据CpuPerc cpuPerc = sigar.getCpuPerc();return cpuFormat(cpuPerc);}/*** 采集本地设备所有CPU数据*/public static List<CpuVO> getCpuList() throws SigarException {List<CpuVO> cpuVOS = new ArrayList<>();// 获取设备所有CPU数据CpuPerc[] cpuPercList = sigar.getCpuPercList();for (CpuPerc cpuPerc : cpuPercList) {cpuVOS.add(cpuFormat(cpuPerc));}return cpuVOS;}/*** 采集本地设备所有网络数据*/public static void getNetwork() throws SigarException {// 获取所有网络设备名称String[] netInterfaceList = sigar.getNetInterfaceList();for (String netInterface : netInterfaceList) {// 按照名称查询所属数据NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(netInterface);// IP地址String address = netInterfaceConfig.getAddress();// 子网掩码String netmask = netInterfaceConfig.getNetmask();NetInterfaceStat netInterfaceStat = sigar.getNetInterfaceStat(netInterface);// 接收的总包数量long rxPackets = netInterfaceStat.getRxPackets();// 发送的总包数量long txPackets = netInterfaceStat.getTxPackets();// 接收的总字节数量long rxBytes = netInterfaceStat.getRxBytes();// 发送的总字节数量long txBytes = netInterfaceStat.getTxBytes();// 接收的错误包数量long rxErrors = netInterfaceStat.getRxErrors();// 发送的错误包数量long txErrors = netInterfaceStat.getTxErrors();// 接收时丢包数量long rxDropped = netInterfaceStat.getRxDropped();// 发送时丢包数量long txDropped = netInterfaceStat.getTxDropped();}}/*** CPU数据返回值格式化* */private static CpuVO cpuFormat(CpuPerc cpuPerc) {// 用户使用率String cpuUser = CpuPerc.format(cpuPerc.getUser());  // CpuPerc.format() 此方法是将采集到的原始数据 计算成带 % 的使用率// 系统使用率String cpuSys = CpuPerc.format(cpuPerc.getSys());// 当前等待率String cpuWait = CpuPerc.format(cpuPerc.getWait());// 当前错误率String cpuNice = CpuPerc.format(cpuPerc.getNice());// 当前空闲率String cpuIdle = CpuPerc.format(cpuPerc.getIdle());// 当前使用率String cpuCombined = CpuPerc.format(cpuPerc.getCombined());CpuVO cpuVO = new CpuVO();// 将String类型的数据 转换为Double类型的数据。(个人项目需求 <非必要>)cpuVO.setUser(Double.parseDouble(cpuUser.replace("%","")));cpuVO.setSys(Double.parseDouble(cpuSys.replace("%","")));cpuVO.setWait(Double.parseDouble(cpuWait.replace("%","")));cpuVO.setNice(Double.parseDouble(cpuNice.replace("%","")));cpuVO.setIdle(Double.parseDouble(cpuIdle.replace("%","")));cpuVO.setCombined(Double.parseDouble(cpuCombined.replace("%","")));return cpuVO;}
}

4. Controller控制类

SigarController.java

package com.example.controller;import com.example.acquisition.SigarLocalDeviceDataAcquisition;
import com.example.vo.CpuVO;
import com.example.vo.MemoryVO;
import lombok.extern.slf4j.Slf4j;
import org.hyperic.sigar.SigarException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author X_HuiYang* @Date 2022/7/21 18:16* @Description*/@Slf4j
@RestController
public class SigarController {@PostMapping("/cpu")public CpuVO getCpuData() {try {return SigarLocalDeviceDataAcquisition.getCpu();} catch (SigarException e) {e.printStackTrace();return null;}}@PostMapping("/memory")public MemoryVO getMemory() {try {return SigarLocalDeviceDataAcquisition.getMemory();} catch (SigarException e) {e.printStackTrace();return null;}}
}

三、采集失败原因以及解决方法

当你第一次在 Window 或 Linux 上运行 Sigar 采集数据时, 大概率会出现如下错误:

Java-SpringBoot-使用Sigar采集设备信息相关推荐

  1. java读取BACnet协议的设备信息-demo

    序 鉴于目前网上对于BACnet协议的相关文章比较少,所以写出这段时间对于java对接该协议的一个demo程序,供参考. 一.代码简介 本代码 gitee地址:https://gitee.com/Si ...

  2. 基于JAVA+SpringBoot+Mybatis+MYSQL的仓库信息管理系统

    1.项目需求 实现材料仓库的管理:提供材料出入库管理等实用功能. 材料入库管理:材料检验入库.入库查询.入库类别按月统计: 材料出库管理:材料库存查询.材料出库.出库查询.出库类别按月统计: 辅助管理 ...

  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的医院信息管理系统

    项目功能: 系统分为门诊管理.住院管理.系统管理.统计管理.数据中心.排班管理.仓库管理.药房管理,本系统重点是门诊和住院管理,填写患者的详细信息,如姓名,年龄.手机号.性别.身份证号.选择科室挂号类 ...

  4. 基于java springboot mysql百度地图的信息标注系统--桌面端的设计与实现

    博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流和毕业设计✌  公众号:[程序代做 源码分享] 免费源码获取.精品资源.面试题库等都给你

  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的旅游信息管理系统

    项目功能: 项目分前后台 前台 地址:http://localhost/index 账号:user 密码:123456 后台 地址:http://localhost/login 账号:root 密码: ...

  6. springboot 获取访问者的ip地址、访问设备信息、城市地址信息

    1.获取访问者的ip地址: 不多说直接上代码,详解见注释 package com.xr.util;import lombok.extern.slf4j.Slf4j;import javax.servl ...

  7. springboot查看请求ip、ip归属地、设备信息、本地MAC地址、操作系统信息

    springboot查看请求ip.ip归属地.设备信息.操作系统信息 1.在pom添加依赖 <dependency><groupId>eu.bitwalker</grou ...

  8. 基于java+springboot+mybatis+vue+mysql的校园台球厅人员与设备管理系统

    项目介绍 校园台球厅人员与设备管理系统采用java技术,基于springboot框架,前端使用vue技术,mysql数据库进行开发,实现了以下功能: 本系统主要包括管理员和用户两个角色组成,主要包括以 ...

  9. 计算机毕业设计之java+springboot基于vue的校园台球厅人员与设备管理系统

    项目介绍 校园台球厅人员与设备管理系统采用java技术,基于springboot框架,mysql数据库进行开发,实现了首页.个人中心.用户管理.会员账号管理.会员充值管理.球桌信息管理.会员预约管理. ...

最新文章

  1. java timezone 107_java - Java使用TimeZone - 堆栈内存溢出
  2. 雷卷 java,阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性...
  3. 通过ping命令测试主机与虚拟机之间是否连通
  4. MATLAB-矩阵基本语法知识
  5. 连接池超时配置_HttpClient连接池的一些思考
  6. vs传值接收页面怎么直接打开_VS2003传值
  7. 有赞九周年,打造技术生态,与开发者一起投身新零售浪潮
  8. C++游戏入门书籍推荐
  9. 【英语学习】【WOTD】glitch 释义/词源/示例
  10. .net如何获取文件夹中的文件_access递归列出文件夹中的文件
  11. [译]GLUT教程 - 笔划字体
  12. ajax教程 异步刷新验证,Ajax实现异步刷新验证用户名是否已存在的具体方法
  13. Redis异常JedisConnectionException:Read timed out解决笔记
  14. 限流, 熔断,降级笔记
  15. android开发案例1---拦截电话,拯救史迪仔,有序广播
  16. 跨境电商无货源自发货铺货ERP店群管理软件
  17. 点云应用——三维空间边界点排序+机器人轨迹引导(1)
  18. 百度文库,道客巴巴等文库免积分下载
  19. Oracle 18c安装操作指导手册
  20. Javac源码简单分析之解析和填充符号表

热门文章

  1. 33学习笔记——描述统计分析3--数据的描述统计量
  2. 视频教程-爱上Axure之软件基础视频教程-Axure
  3. delete、truncate 、Drop删除表的区别
  4. 【Pygame基本使用】
  5. Presto RBO之broadcast join与partitioned join类型的选择优化
  6. 【N32G457 】基于RT-Thread和N32G457 数码管时钟
  7. 1024凑数篇之程序员职业生涯问答
  8. 认识V模型,W模型,H模型三类模型
  9. 定时循环发送TCP消息(例如:控制设备的开关机等场景)—— 定时执行专家
  10. 解决 FileNotFoundError: [WinError 2] 系统找不到指定的文件