You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Server.java 6.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package com.xkcoding.websocket.model;
  2. import cn.hutool.core.util.NumberUtil;
  3. import com.xkcoding.websocket.model.server.*;
  4. import com.xkcoding.websocket.util.IpUtil;
  5. import oshi.SystemInfo;
  6. import oshi.hardware.CentralProcessor;
  7. import oshi.hardware.CentralProcessor.TickType;
  8. import oshi.hardware.GlobalMemory;
  9. import oshi.hardware.HardwareAbstractionLayer;
  10. import oshi.software.os.FileSystem;
  11. import oshi.software.os.OSFileStore;
  12. import oshi.software.os.OperatingSystem;
  13. import oshi.util.Util;
  14. import java.net.UnknownHostException;
  15. import java.util.LinkedList;
  16. import java.util.List;
  17. import java.util.Properties;
  18. /**
  19. * <p>
  20. * 服务器相关信息实体
  21. * </p>
  22. *
  23. * @package: com.xkcoding.websocket.model
  24. * @description: 服务器相关信息实体
  25. * @author: yangkai.shen
  26. * @date: Created in 2018-12-14 16:09
  27. * @copyright: Copyright (c) 2018
  28. * @version: V1.0
  29. * @modified: yangkai.shen
  30. */
  31. public class Server {
  32. private static final int OSHI_WAIT_SECOND = 1000;
  33. /**
  34. * CPU相关信息
  35. */
  36. private Cpu cpu = new Cpu();
  37. /**
  38. * 內存相关信息
  39. */
  40. private Mem mem = new Mem();
  41. /**
  42. * JVM相关信息
  43. */
  44. private Jvm jvm = new Jvm();
  45. /**
  46. * 服务器相关信息
  47. */
  48. private Sys sys = new Sys();
  49. /**
  50. * 磁盘相关信息
  51. */
  52. private List<SysFile> sysFiles = new LinkedList<SysFile>();
  53. public Cpu getCpu() {
  54. return cpu;
  55. }
  56. public void setCpu(Cpu cpu) {
  57. this.cpu = cpu;
  58. }
  59. public Mem getMem() {
  60. return mem;
  61. }
  62. public void setMem(Mem mem) {
  63. this.mem = mem;
  64. }
  65. public Jvm getJvm() {
  66. return jvm;
  67. }
  68. public void setJvm(Jvm jvm) {
  69. this.jvm = jvm;
  70. }
  71. public Sys getSys() {
  72. return sys;
  73. }
  74. public void setSys(Sys sys) {
  75. this.sys = sys;
  76. }
  77. public List<SysFile> getSysFiles() {
  78. return sysFiles;
  79. }
  80. public void setSysFiles(List<SysFile> sysFiles) {
  81. this.sysFiles = sysFiles;
  82. }
  83. public void copyTo() throws Exception {
  84. SystemInfo si = new SystemInfo();
  85. HardwareAbstractionLayer hal = si.getHardware();
  86. setCpuInfo(hal.getProcessor());
  87. setMemInfo(hal.getMemory());
  88. setSysInfo();
  89. setJvmInfo();
  90. setSysFiles(si.getOperatingSystem());
  91. }
  92. /**
  93. * 设置CPU信息
  94. */
  95. private void setCpuInfo(CentralProcessor processor) {
  96. // CPU信息
  97. long[] prevTicks = processor.getSystemCpuLoadTicks();
  98. Util.sleep(OSHI_WAIT_SECOND);
  99. long[] ticks = processor.getSystemCpuLoadTicks();
  100. long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
  101. long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
  102. long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
  103. long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
  104. long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
  105. long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
  106. long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
  107. long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
  108. long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
  109. cpu.setCpuNum(processor.getLogicalProcessorCount());
  110. cpu.setTotal(totalCpu);
  111. cpu.setSys(cSys);
  112. cpu.setUsed(user);
  113. cpu.setWait(iowait);
  114. cpu.setFree(idle);
  115. }
  116. /**
  117. * 设置内存信息
  118. */
  119. private void setMemInfo(GlobalMemory memory) {
  120. mem.setTotal(memory.getTotal());
  121. mem.setUsed(memory.getTotal() - memory.getAvailable());
  122. mem.setFree(memory.getAvailable());
  123. }
  124. /**
  125. * 设置服务器信息
  126. */
  127. private void setSysInfo() {
  128. Properties props = System.getProperties();
  129. sys.setComputerName(IpUtil.getHostName());
  130. sys.setComputerIp(IpUtil.getHostIp());
  131. sys.setOsName(props.getProperty("os.name"));
  132. sys.setOsArch(props.getProperty("os.arch"));
  133. sys.setUserDir(props.getProperty("user.dir"));
  134. }
  135. /**
  136. * 设置Java虚拟机
  137. */
  138. private void setJvmInfo() throws UnknownHostException {
  139. Properties props = System.getProperties();
  140. jvm.setTotal(Runtime.getRuntime().totalMemory());
  141. jvm.setMax(Runtime.getRuntime().maxMemory());
  142. jvm.setFree(Runtime.getRuntime().freeMemory());
  143. jvm.setVersion(props.getProperty("java.version"));
  144. jvm.setHome(props.getProperty("java.home"));
  145. }
  146. /**
  147. * 设置磁盘信息
  148. */
  149. private void setSysFiles(OperatingSystem os) {
  150. FileSystem fileSystem = os.getFileSystem();
  151. OSFileStore[] fsArray = fileSystem.getFileStores();
  152. for (OSFileStore fs : fsArray) {
  153. long free = fs.getUsableSpace();
  154. long total = fs.getTotalSpace();
  155. long used = total - free;
  156. SysFile sysFile = new SysFile();
  157. sysFile.setDirName(fs.getMount());
  158. sysFile.setSysTypeName(fs.getType());
  159. sysFile.setTypeName(fs.getName());
  160. sysFile.setTotal(convertFileSize(total));
  161. sysFile.setFree(convertFileSize(free));
  162. sysFile.setUsed(convertFileSize(used));
  163. sysFile.setUsage(NumberUtil.mul(NumberUtil.div(used, total, 4), 100));
  164. sysFiles.add(sysFile);
  165. }
  166. }
  167. /**
  168. * 字节转换
  169. *
  170. * @param size 字节大小
  171. * @return 转换后值
  172. */
  173. public String convertFileSize(long size) {
  174. long kb = 1024;
  175. long mb = kb * 1024;
  176. long gb = mb * 1024;
  177. if (size >= gb) {
  178. return String.format("%.1f GB", (float) size / gb);
  179. } else if (size >= mb) {
  180. float f = (float) size / mb;
  181. return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
  182. } else if (size >= kb) {
  183. float f = (float) size / kb;
  184. return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
  185. } else {
  186. return String.format("%d B", size);
  187. }
  188. }
  189. }

一个用来深度学习并实战 spring boot 的项目,目前总共包含 66 个集成demo,已经完成 55 个。

Contributors (1)