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

网友投稿 264 2023-01-19

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相关http://信息

*/

private Cpu cpu = new Cpu();

/**

* 內存相关信息

*/

private Mem mem = new Mem();

/**

* JVM相关信息

*/

private Jvm jvm = new Jvm();

/**

* 服务器相关信息

*/

private Sys sys = new Sys();

/**

* 磁盘相关信息

*/

private List sysFiles = new LinkedList();

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 getSysFiles()

{

return sysFiles;

}

public void setSysFiles(List 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 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);

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现学生信息管理系统IO版本
下一篇:sdk开放api接口手环(智能手环开发SDK)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~