天翼云代理,天翼云代理商,北京代理商
天翼云折扣专线:400-150-1900(全国市话)

Sigar java 服务器信息探针、监控

2022-02-09 11:25:34
简介: Sigar java 服务器信息探针、监控
package org.fh.controller.tools; import java.net.InetAddress; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.fh.controller.base.BaseController; import org.fh.entity.PageData; import org.hyperic.sigar.CpuInfo; import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; import org.hyperic.sigar.Mem; import org.hyperic.sigar.NetInterfaceConfig; import org.hyperic.sigar.NetInterfaceStat; import org.hyperic.sigar.Sigar; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /**  * 说明:服务器信息监控  * 作者:FH Admin  * from:fhadmin.cn  */ @Controller @RequestMapping("/serverRunstate") public class ServerRunstateController extends BaseController {   /**获取常量数据  * @return  */  @RequestMapping(value="/getData")  @ResponseBody  public Object getData() throws Exception{  Map<String,Object> map = new HashMap<String,Object>();  Sigar sigar = new Sigar();  String errInfo = "success";  PageData pd = new PageData();  property(pd);         //基本信息  gethardDiskData(pd,sigar);    //硬盘使用情况  map.put("pd", pd);  map.put("result", errInfo);  return map;  }   /**获取事实数据  * @return  */  @RequestMapping(value="/realTimeData")  @ResponseBody  public Object realTimeData() throws Exception{  Map<String,Object> map = new HashMap<String,Object>();  Sigar sigar = new Sigar();  String errInfo = "success";  PageData pd = new PageData();  getJvmMemoryData(pd);     //JVM内存  getServerMemoryData(pd,sigar);  //服务器内存  getCpuData(pd,sigar);     //CPU  map.put("pd", pd);  map.put("result", errInfo);  return map;  }   /**获取网速  * @return  */  @RequestMapping(value="/networkspeed")  @ResponseBody  public Object networkspeed() throws Exception{  Map<String,Object> map = new HashMap<String,Object>();  Sigar sigar = new Sigar();  String errInfo = "success";  PageData pd = new PageData();  long[] fhbytes1 = getNet(sigar);  Thread.sleep(1000);  long[] fhbytes2 = getNet(sigar);  long rxspeed = fhbytes2[0] - fhbytes1[0];  long txspeed = fhbytes2[1] - fhbytes1[1];  pd.put("rxspeed", (double) Math.round((rxspeed/2014.0) * 100) / 100);   //下载网速  pd.put("txspeed", (double) Math.round((txspeed/1024.0) * 100) / 100);   //上传网速  map.put("pd", pd);  map.put("result", errInfo);  return map;  }   /**获取JVM内存数据  * @param pd  * @return  * @throws Exception  */  private PageData getJvmMemoryData(PageData pd){  double byteToMb = 1024.0 * 1024.0;  double jvmTotal = 0;  double jvmFree = 0;  double jvmUse = 0;  Runtime rt = Runtime.getRuntime();  jvmTotal = rt.totalMemory() / byteToMb;  jvmFree = rt.freeMemory() / byteToMb;  jvmUse = jvmTotal - jvmFree;  pd.put("totalJvmMemory", (double) Math.round(jvmTotal * 100) / 100);    //JVM总内存空间  pd.put("useJvmMemory", (double) Math.round(jvmUse * 100) / 100);      //JVM已使用的内存  return pd;  }   /**获取服务器内存数据  * @param pd  * @param sigar  * @throws Exception  */  private void getServerMemoryData(PageData pd, Sigar sigar) throws Exception {  double byteToGb = 1024.0 * 1024.0 * 1024.0;  double serveotal = 0;  double serverUse = 0;  Mem mem = sigar.getMem();  serveotal = mem.getTotal() / byteToGb;  serverUse = mem.getUsed() / byteToGb;  pd.put("totalServerMemory", (double) Math.round(serveotal * 100) / 100);    //服务器总内存空间  pd.put("useServerMemory", (double) Math.round(serverUse * 100) / 100);      //服务器已使用的内存  }   /**获取服务器CUP使用率  * @param pd  * @param sigar  * @throws Exception  */  private void getCpuData(PageData pd, Sigar sigar) throws Exception {  CpuInfo infos[] = sigar.getCpuInfoList();  CpuPerc cpuList[] = null;  cpuList = sigar.getCpuPercList();  double cpuuse = 0;  for (int i = 0; i < infos.length; i++) {        //多块或者多核心CPU  cpuuse += cpuList[i].getCombined() * 100.00;  }  pd.put("cpuuse", (double) Math.round(((cpuuse/(infos.length * 100))*100) * 100) / 100 );//使用率  }   /**获取服务器硬盘情况  * @param pd  * @param sigar  * @throws Exception  */  private void gethardDiskData(PageData pd, Sigar sigar) throws Exception {  double byteToGb = 1024.0 * 1024.0;  long totalSize = 0;  long useSize = 0;  FileSystem fslist[] = sigar.getFileSystemList();  for (int i = 0; i < fslist.length; i++) {  FileSystem fs = fslist[i];  FileSystemUsage usage = null;  usage = sigar.getFileSystemUsage(fs.getDirName());  switch (fs.getType()) {  case 0: // TYPE_UNKNOWN :未知  break;  case 1: // TYPE_NONE  break;  case 2: // TYPE_LOCAL_DISK : 本地硬盘  totalSize += usage.getTotal();  //总大小  useSize += usage.getUsed();   //已经使用量  break;  case 3:// TYPE_NETWORK :网络  break;  case 4:// TYPE_RAM_DISK :闪存  break;  case 5:// TYPE_CDROM :光驱  break;  case 6:// TYPE_SWAP :页面交换  break;  }  }  pd.put("totalDiskSize",(double) Math.round((totalSize / byteToGb) * 10) / 10);  //硬盘总大小  pd.put("useDiskSize",(double) Math.round((useSize / byteToGb) * 10) / 10);    //硬盘已使用大小  }   /**获取基础信息  * @param pd  * @return  * @throws Exception  */  private PageData property(PageData pd) throws Exception {  Runtime r = Runtime.getRuntime();  Properties props = System.getProperties();  InetAddress addr;  addr = InetAddress.getLocalHost();  String ip = addr.getHostAddress();  Map<String, String> map = System.getenv();  String userName = map.get("USERNAME");// 获取用户名  pd.put("userName", userName);     //计算机用户  pd.put("IP", ip);           //本地ip地址  pd.put("HostName", addr.getHostName()); //本地主机名  pd.put("availableProcessors", r.availableProcessors());   //JVM可以使用的处理器个数  pd.put("javaversion", props.getProperty("java.version")); //Java的运行环境版本  pd.put("javahome", props.getProperty("java.home"));     //Java的安装路径  pd.put("javavmversion", props.getProperty("java.vm.specification.version"));  //Java的虚拟机规范版本  pd.put("javavmname", props.getProperty("java.vm.name"));        //Java的虚拟机实现名称  pd.put("javaclassversion", props.getProperty("java.class.version"));  //Java的类格式版本号  pd.put("osarch", props.getProperty("os.arch"));   //操作系统的构架  pd.put("userdir", props.getProperty("user.dir")); //用户的当前工作目录  return pd;  }  /**获取接收字节数  * @return  * @throws Exception  */  private static long[] getNet(Sigar sigar) throws Exception {  long[] fhbytes = new long[2];  String ifNames[] = sigar.getNetInterfaceList();  for (int i = 0; i < ifNames.length; i++) {  String name = ifNames[i];  NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);  if ((ifconfig.getFlags() & 1L) <= 0L) {  continue;  }  NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);  long fhRxBytes = ifstat.getRxBytes();  long fhTxBytes = ifstat.getTxBytes();  if(fhRxBytes > 0) {  fhbytes[0] = fhRxBytes;  fhbytes[1] = fhTxBytes;  return fhbytes;  }  }  fhbytes[0] = 0;  fhbytes[1] = 0;  return fhbytes;  }  }

 

12年经验 · 提供上云保障

服务热线:132-6161-6125(手机) 400-150-1900(全国市话)

站内导航: 天翼云服务器价格| 天翼云购买流程| 天翼云代理| 北京天翼云代理商| 杭州天翼云代理| 深圳天翼云代理商| 钉钉代理商| 阿里云代理| 公司官网

我公司收款账号| 天翼云备案系统

CopyRight © 2019 天翼云代理商. All Rights Reserved 京ICP备11011846号-15 管理-北京志远天辰科技有限公司