Java服务器主机信息监控工具类的示例代码

作者:兴趣使然的草帽路飞 时间:2023-07-26 04:34:49 

对接前端后效果展示如图:

Java服务器主机信息监控工具类的示例代码
Java服务器主机信息监控工具类的示例代码

1、CPU相关信息实体类


/**
* CPU相关信息
*
* @author csp
*/
public class Cpu
{
   /**
    * 核心数
    */
   private int cpuNum;

/**
    * CPU总的使用率
    */
   private double total;

/**
    * CPU系统使用率
    */
   private double sys;

/**
    * CPU用户使用率
    */
   private double used;

/**
    * CPU当前等待率
    */
   private double wait;

/**
    * CPU当前空闲率
    */
   private double free;

public int getCpuNum()
   {
       return cpuNum;
   }

public void setCpuNum(int cpuNum)
   {
       this.cpuNum = cpuNum;
   }

public double getTotal()
   {
       return Arith.round(Arith.mul(total, 100), 2);
   }

public void setTotal(double total)
   {
       this.total = total;
   }

public double getSys()
   {
       return Arith.round(Arith.mul(sys / total, 100), 2);
   }

public void setSys(double sys)
   {
       this.sys = sys;
   }

public double getUsed()
   {
       return Arith.round(Arith.mul(used / total, 100), 2);
   }

public void setUsed(double used)
   {
       this.used = used;
   }

public double getWait()
   {
       return Arith.round(Arith.mul(wait / total, 100), 2);
   }

public void setWait(double wait)
   {
       this.wait = wait;
   }

public double getFree()
   {
       return Arith.round(Arith.mul(free / total, 100), 2);
   }

public void setFree(double free)
   {
       this.free = free;
   }
}

2、內存相关信息实体类


/**
* 內存相关信息
*
* @author csp
*/
public class Mem
{
   /**
    * 内存总量
    */
   private double total;

/**
    * 已用内存
    */
   private double used;

/**
    * 剩余内存
    */
   private double free;

public double getTotal()
   {
       return Arith.div(total, (1024 * 1024 * 1024), 2);
   }

public void setTotal(long total)
   {
       this.total = total;
   }

public double getUsed()
   {
       return Arith.div(used, (1024 * 1024 * 1024), 2);
   }

public void setUsed(long used)
   {
       this.used = used;
   }

public double getFree()
   {
       return Arith.div(free, (1024 * 1024 * 1024), 2);
   }

public void setFree(long free)
   {
       this.free = free;
   }

public double getUsage()
   {
       return Arith.mul(Arith.div(used, total, 4), 100);
   }
}

3、JVM相关信息实体类


/**
* JVM相关信息
*
* @author csp
*/
public class Jvm
{
   /**
    * 当前JVM占用的内存总数(M)
    */
   private double total;

/**
    * JVM最大可用内存总数(M)
    */
   private double max;

/**
    * JVM空闲内存(M)
    */
   private double free;

/**
    * JDK版本
    */
   private String version;

/**
    * JDK路径
    */
   private String home;

public double getTotal()
   {
       return Arith.div(total, (1024 * 1024), 2);
   }

public void setTotal(double total)
   {
       this.total = total;
   }

public double getMax()
   {
       return Arith.div(max, (1024 * 1024), 2);
   }

public void setMax(double max)
   {
       this.max = max;
   }

public double getFree()
   {
       return Arith.div(free, (1024 * 1024), 2);
   }

public void setFree(double free)
   {
       this.free = free;
   }

public double getUsed()
   {
       return Arith.div(total - free, (1024 * 1024), 2);
   }

public double getUsage()
   {
       return Arith.mul(Arith.div(total - free, total, 4), 100);
   }

/**
    * 获取JDK名称
    */
   public String getName()
   {
       return ManagementFactory.getRuntimeMXBean().getVmName();
   }

public String getVersion()
   {
       return version;
   }

public void setVersion(String version)
   {
       this.version = version;
   }

public String getHome()
   {
       return home;
   }

public void setHome(String home)
   {
       this.home = home;
   }

/**
    * JDK启动时间
    */
   public String getStartTime()
   {
       return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate());
   }

/**
    * JDK运行时间
    */
   public String getRunTime()
   {
       return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate());
   }
}

4、主机系统相关信息实体类


/**
* 系统相关信息
*
* @author csp
*/
public class Sys
{
   /**
    * 服务器名称
    */
   private String computerName;

/**
    * 服务器Ip
    */
   private String computerIp;

/**
    * 项目路径
    */
   private String userDir;

/**
    * 操作系统
    */
   private String osName;

/**
    * 系统架构
    */
   private String osArch;

public String getComputerName()
   {
       return computerName;
   }

public void setComputerName(String computerName)
   {
       this.computerName = computerName;
   }

public String getComputerIp()
   {
       return computerIp;
   }

public void setComputerIp(String computerIp)
   {
       this.computerIp = computerIp;
   }

public String getUserDir()
   {
       return userDir;
   }

public void setUserDir(String userDir)
   {
       this.userDir = userDir;
   }

public String getOsName()
   {
       return osName;
   }

public void setOsName(String osName)
   {
       this.osName = osName;
   }

public String getOsArch()
   {
       return osArch;
   }

public void setOsArch(String osArch)
   {
       this.osArch = osArch;
   }
}

5、系统文件相关信息实体类


/**
* 系统文件相关信息
*
* @author csp
*/
public class SysFile
{
   /**
    * 盘符路径
    */
   private String dirName;

/**
    * 盘符类型
    */
   private String sysTypeName;

/**
    * 文件类型
    */
   private String typeName;

/**
    * 总大小
    */
   private String total;

/**
    * 剩余大小
    */
   private String free;

/**
    * 已经使用量
    */
   private String used;

/**
    * 资源的使用率
    */
   private double usage;

public String getDirName()
   {
       return dirName;
   }

public void setDirName(String dirName)
   {
       this.dirName = dirName;
   }

public String getSysTypeName()
   {
       return sysTypeName;
   }

public void setSysTypeName(String sysTypeName)
   {
       this.sysTypeName = sysTypeName;
   }

public String getTypeName()
   {
       return typeName;
   }

public void setTypeName(String typeName)
   {
       this.typeName = typeName;
   }

public String getTotal()
   {
       return total;
   }

public void setTotal(String total)
   {
       this.total = total;
   }

public String getFree()
   {
       return free;
   }

public void setFree(String free)
   {
       this.free = free;
   }

public String getUsed()
   {
       return used;
   }

public void setUsed(String used)
   {
       this.used = used;
   }

public double getUsage()
   {
       return usage;
   }

public void setUsage(double usage)
   {
       this.usage = usage;
   }
}

6、服务器相关信息实体类


/**
* 服务器相关信息
*
* @author csp
*/
public class Server
{
   private static final int OSHI_WAIT_SECOND = 1000;

/**
    * CPU相关信息
    */
   private Cpu cpu = new Cpu();

/**
    * 內存相关信息
    */
   private Mem mem = new Mem();

/**
    * JVM相关信息
    */
   private Jvm jvm = new Jvm();

/**
    * 服务器相关信息
    */
   private Sys sys = new Sys();

/**
    * 磁盘相关信息
    */
   private List<SysFile> sysFiles = new LinkedList<SysFile>();

public Cpu getCpu()
   {
       return cpu;
   }

public void setCpu(Cpu cpu)
   {
       this.cpu = cpu;
   }

public Mem getMem()
   {
       return mem;
   }

public void setMem(Mem mem)
   {
       this.mem = mem;
   }

public Jvm getJvm()
   {
       return jvm;
   }

public void setJvm(Jvm jvm)
   {
       this.jvm = jvm;
   }

public Sys getSys()
   {
       return sys;
   }

public void setSys(Sys sys)
   {
       this.sys = sys;
   }

public List<SysFile> getSysFiles()
   {
       return sysFiles;
   }

public void setSysFiles(List<SysFile> sysFiles)
   {
       this.sysFiles = sysFiles;
   }

/**
    * 获取服务器主机相关信息
    * @throws Exception
    */
   public void copyTo() throws Exception
   {
       // 获取系统信息
       SystemInfo si = new SystemInfo();
       // 根据SystemInfo获取硬件实例
       HardwareAbstractionLayer hal = si.getHardware();
       // 获取硬件CPU信息
       setCpuInfo(hal.getProcessor());
       // 获取硬件内存信息
       setMemInfo(hal.getMemory());

// 设置服务器信息
       setSysInfo();

// 设置Java虚拟机
       setJvmInfo();

// 设置磁盘信息
       setSysFiles(si.getOperatingSystem());
   }

/**
    * 设置CPU信息
    */
   private void setCpuInfo(CentralProcessor processor)
   {
       // CPU信息
       long[] prevTicks = processor.getSystemCpuLoadTicks();
       Util.sleep(OSHI_WAIT_SECOND);
       long[] ticks = processor.getSystemCpuLoadTicks();
       long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
       long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
       long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
       long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
       long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
       long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
       long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
       long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
       long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
       cpu.setCpuNum(processor.getLogicalProcessorCount());// Cpu 核数
       cpu.setTotal(totalCpu);// CPU总的使用率
       cpu.setSys(cSys);// CPU系统使用率
       cpu.setUsed(user);// CPU用户使用率
       cpu.setWait(iowait);// CPU当前等待率
       cpu.setFree(idle);// CPU当前空闲率
   }

/**
    * 设置内存信息
    */
   private void setMemInfo(GlobalMemory memory)
   {
       mem.setTotal(memory.getTotal());// 总内存大小
       mem.setUsed(memory.getTotal() - memory.getAvailable());// 已使用内存大小
       mem.setFree(memory.getAvailable());// 空闲内存大小
   }

/**
    * 设置服务器信息
    */
   private void setSysInfo()
   {
       // 获取当前的系统属性
       Properties props = System.getProperties();
       sys.setComputerName(IpUtils.getHostName());// 获取主机名称
       sys.setComputerIp(IpUtils.getHostIp());// 获取主机IP
       sys.setOsName(props.getProperty("os.name"));// 获取主机类型 Windows 10
       sys.setOsArch(props.getProperty("os.arch"));// 获取主机显卡类型 amd64
       sys.setUserDir(props.getProperty("user.dir"));// 获取项目所在路径 F:\git\ruoyi\RuoYi-Vue
   }

/**
    * 设置Java虚拟机
    */
   private void setJvmInfo() throws UnknownHostException
   {
       Properties props = System.getProperties();
       jvm.setTotal(Runtime.getRuntime().totalMemory());// JVM总内存 625.5M
       jvm.setMax(Runtime.getRuntime().maxMemory());// JVM已使用内存 347.99M
       jvm.setFree(Runtime.getRuntime().freeMemory());// JVM空闲内存 277.51M
       jvm.setVersion(props.getProperty("java.version"));// jdk版本 1.8
       jvm.setHome(props.getProperty("java.home"));// JDK安装路径 C:\Program Files\Java\jdk1.8.0_201\jre
   }

/**
    * 设置磁盘信息
    */
   private void setSysFiles(OperatingSystem os)
   {
       // 根据 操作系统(OS) 获取 FileSystem
       FileSystem fileSystem = os.getFileSystem();
       // 根据 FileSystem 获取主机磁盘信息list集合
       List<OSFileStore> fsArray = fileSystem.getFileStores();
       for (OSFileStore fs : fsArray)
       {
           long free = fs.getUsableSpace();// 磁盘空闲容量
           long total = fs.getTotalSpace();// 磁盘总容量
           long used = total - free;// 磁盘已使用容量
           SysFile sysFile = new SysFile();
           sysFile.setDirName(fs.getMount());// 磁盘符号 C:\
           sysFile.setSysTypeName(fs.getType());// 磁盘类型 NTFS
           sysFile.setTypeName(fs.getName());// 磁盘名称 本地固定磁盘 (C:)
           sysFile.setTotal(convertFileSize(total));// 磁盘总容量
           sysFile.setFree(convertFileSize(free));// 磁盘空闲容量
           sysFile.setUsed(convertFileSize(used));// 磁盘已使用容量
           sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));// 磁盘资源的使用率
           sysFiles.add(sysFile);
       }
   }

/**
    * 字节转换
    *
    * @param size 字节大小
    * @return 转换后值
    */
   public String convertFileSize(long size)
   {
       long kb = 1024;
       long mb = kb * 1024;
       long gb = mb * 1024;
       if (size >= gb)
       {
           return String.format("%.1f GB", (float) size / gb);
       }
       else if (size >= mb)
       {
           float f = (float) size / mb;
           return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
       }
       else if (size >= kb)
       {
           float f = (float) size / kb;
           return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
       }
       else
       {
           return String.format("%d B", size);
       }
   }
}

7、Controller接口对接前端


/**
* 服务器监控
*
* @author csp
*/
@RestController
@RequestMapping("/monitor/server")
public class ServerController
{
   /**
    * 获取服务器相关信息
    * @return
    * @throws Exception
    */
   @PreAuthorize("@ss.hasPermi('monitor:server:list')")// Spring Security自定义权限控制注解,不影响结果,可以不加
   // AjaxResult 自定义返回结果类,不影响结果,可以自定义
   @GetMapping()
   public AjaxResult getInfo() throws Exception
   {
       // 获取服务器相关信息
       Server server = new Server();
       server.copyTo();

return AjaxResult.success(server);
   }
}

来源:https://blog.csdn.net/weixin_43591980/article/details/116157814

标签:Java,主机信息,监控
0
投稿

猜你喜欢

  • Android编程中自定义dialog用法实例

    2023-05-10 07:21:37
  • C#中在WebClient中使用post发送数据实现方法

    2023-05-01 00:03:54
  • Spring Boot 利用 XML 方式整合 MyBatis

    2023-02-09 23:01:18
  • Kotlin基础学习之lambda中return语句详解

    2023-09-04 16:33:41
  • Android动画之雷达扫描效果

    2021-06-10 08:06:52
  • Android中GPS定位的用法实例

    2021-07-26 23:26:29
  • Spring中校验器(Validator)的深入讲解

    2022-03-05 11:58:35
  • Android实现显示和隐藏密码功能的示例代码

    2022-12-14 23:40:09
  • springcloud引入spring-cloud-starter-openfeign失败的解决

    2022-10-30 19:15:09
  • C#字符串的常用操作工具类代码分享

    2022-08-30 16:52:24
  • MyBatis通用Mapper和PageHelper的过程详解

    2022-09-29 16:17:03
  • Spring Boot2.x如何自定义Endpoint

    2023-03-05 18:04:12
  • 利用ThreadLocal实现一个上下文管理组件

    2022-04-16 03:42:23
  • 使用Java设置字型和颜色的方法详解

    2023-04-14 05:09:23
  • unity实现简单贪吃蛇游戏

    2023-05-25 23:59:53
  • WPF实现3D翻牌式倒计时特效

    2021-11-11 16:08:21
  • Android编程实现3D立体旋转效果的实例代码

    2023-04-01 13:40:50
  • Android编程中EditText限制文字输入的方法

    2023-07-19 07:30:48
  • C语言简明讲解变量的属性

    2021-06-23 17:45:28
  • Spring的@Autowired加到接口上但获取的是实现类的问题

    2023-08-23 21:32:21
  • asp之家 软件编程 m.aspxhome.com