- 一、pom.xml
- 二、工具类
- 1.服务器相关信息 Server.class
- 2.CPU相关信息 Cpu.class
- 3.內存相关信息 Mem.class
- 4.JVM相关信息 Jvm.class
- 5.系统相关信息 Sys.class
- 6.系统文件相关信息 SysFile.class
- 6.网速相关信息 NetWork.class
- 三、测试
在网上找了很多示例结果都没有服务器当时的上行和下行的处理,偶然间在一篇文章中记载了网速处理的示例,在此结合起来,废话不多说开整 一、pom.xml
二、工具类 1.服务器相关信息 Server.classcom.github.oshi oshi-core5.6.1
public class Server { private static final int OSHI_WAIT_SECOND = 1000; private static final int SLEEP_TIME = 2*1000 ; private Cpu cpu = new Cpu(); private Mem mem = new Mem(); private Jvm jvm = new Jvm(); private Sys sys = new Sys(); private List2.CPU相关信息 Cpu.classsysFiles = new linkedList (); private NetWork netWork = new NetWork(); 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; } public NetWork getNetWork() { return netWork; } public void setNetWork(NetWork netWork) { this.netWork = netWork; } 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()); //设置上行下行速度 setNetWork(); } public void setNetWork(){ Properties props = System.getProperties(); String os = props.getProperty("os.name").toLowerCase(); os = os.startsWith("win")?"windows":"linux"; Map result = new HashMap<>(); Process pro = null; Runtime r = Runtime.getRuntime(); BufferedReader input = null; try { String command = "windows".equals(os)?"netstat -e":"ifconfig"; pro = r.exec(command); input = new BufferedReader(new InputStreamReader(pro.getInputStream())); long result1[] = readInLine(input, os); Thread.sleep(SLEEP_TIME); pro.destroy(); input.close(); pro = r.exec(command); input = new BufferedReader(new InputStreamReader(pro.getInputStream())); long result2[] = readInLine(input, os); netWork.setRxPercent(formatNumber((result2[0]-result1[0])/(1024.0*(SLEEP_TIME / 1000)))); // 下行速率(kB/s) netWork.setTxPercent(formatNumber((result2[1]-result1[1])/(1024.0*(SLEEP_TIME / 1000)))); // 上行速率(kB/s) } catch (Exception e) { e.printStackTrace(); }finally{ if(input!=null){ try { input.close(); } catch (IOException e) { e.printStackTrace(); } } Optional.ofNullable(pro).ifPresent(p->p.destroy()); } } private static long[] readInLine(BufferedReader input, String osType) { long arr[] = new long[2]; StringTokenizer tokenStat = null; try { if (osType.equals("linux")) { // 获取linux环境下的网口上下行速率 long rx=0,tx = 0; String line = null; //RX packets:4171603 errors:0 dropped:0 overruns:0 frame:0 //TX packets:4171603 errors:0 dropped:0 overruns:0 carrier:0 while((line=input.readLine())!=null){ if(line.indexOf("RX packets")>=0){ rx+=Long.parseLong(line.substring(line.indexOf("RX packets")+11,line.indexOf(" ",line.indexOf("RX packets")+11))); }else if(line.indexOf("TX packets")>=0){ tx+=Long.parseLong(line.substring(line.indexOf("TX packets")+11,line.indexOf(" ",line.indexOf("TX packets")+11))); } } arr[0]=rx; arr[1]=tx; } else { // 获取windows环境下的网口上下行速率 input.readLine(); input.readLine(); input.readLine(); input.readLine(); tokenStat = new StringTokenizer(input.readLine()); tokenStat.nextToken(); arr[0] = Long.parseLong(tokenStat.nextToken()); arr[1] = Long.parseLong(tokenStat.nextToken()); } } catch (Exception e) { e.printStackTrace(); } return arr; } private static String formatNumber(double f) { return new Formatter().format("%.2f", f).toString(); } 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(); try { InetAddress addr = InetAddress.getLocalHost(); sys.setComputerName(addr.getHostName());// 获取主机名称 sys.setComputerIp(addr.getHostAddress());// 获取主机IP }catch (Exception e){ e.printStackTrace(); } sys.setOsName(props.getProperty("os.name"));// 获取主机类型 Windows 10 sys.setOsArch(props.getProperty("os.arch"));// 获取主机显卡类型 amd64 sys.setUserDir(props.getProperty("user.dir"));// 获取项目所在路径 F:gitruoyiRuoYi-Vue } 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 FilesJavajdk1.8.0_201jre } private void setSysFiles(OperatingSystem os) { // 根据 *** 作系统(OS) 获取 FileSystem FileSystem fileSystem = os.getFileSystem(); // 根据 FileSystem 获取主机磁盘信息list集合 List fileStores = fileSystem.getFileStores(); for (OSFileStore fs : fileStores) { 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); } } 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); } } }
public class Cpu { private int cpuNum; private double total; private double sys; private double used; private double wait; 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; } }3.內存相关信息 Mem.class
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); } }4.JVM相关信息 Jvm.class
public class Jvm { private double total; private double max; private double free; private String version; 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); } 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; } public String getStartTime() { return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate()); } public String getRunTime() { return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate()); } }5.系统相关信息 Sys.class
public class Sys { private String computerName; 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; } }6.系统文件相关信息 SysFile.class
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.网速相关信息 NetWork.class
public class NetWork { private String txPercent ; private String rxPercent ; public String getTxPercent() { return txPercent; } public void setTxPercent(String txPercent) { this.txPercent = txPercent; } public String getRxPercent() { return rxPercent; } public void setRxPercent(String rxPercent) { this.rxPercent = rxPercent; } }三、测试
@ApiOperation(value = "获取系统信息", notes = "用于获取系统信息") @RequestMapping(value = "sys/information", method = RequestMethod.POST, produces = "application/json;charset=utf-8") public Result information() { Result result = new Result(); ServerVO server = new ServerVO(); try { server.copyTo(); //就这个代码有用 result.setData(server); } catch (Exception e) { e.printStackTrace(); } return result; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)