public static void getServerCpuInfo(Sigar sigar, ServerStatus status) {
   try {
     CpuInfo infos[] = sigar.getCpuInfoList();
     CpuPerc cpuList[] = sigar.getCpuPercList();
     double totalUse = 0L;
     for (int i = 0; i < infos.length; i++) {
       CpuPerc perc = cpuList[i];
       ServerStatus.CpuInfoVo cpuInfo = new ServerStatus.CpuInfoVo();
       cpuInfo.setId(infos[i].hashCode() + "");
       cpuInfo.setCacheSize(infos[i].getCacheSize());
       cpuInfo.setModel(infos[i].getModel());
       cpuInfo.setUsed(CpuPerc.format(perc.getCombined()));
       cpuInfo.setUsedOrigVal(perc.getCombined());
       cpuInfo.setIdle(CpuPerc.format(perc.getIdle()));
       cpuInfo.setTotalMHz(infos[i].getMhz());
       cpuInfo.setVendor(infos[i].getVendor());
       status.getCpuInfos().add(cpuInfo);
       totalUse += perc.getCombined();
     }
     String cpuu = CpuPerc.format(totalUse / status.getCpuInfos().size());
     cpuu = cpuu.substring(0, cpuu.length() - 1);
     status.setCpuUsage(cpuu);
   } catch (Exception e) {
   }
 }
  public static void getServerMemoryInfo(Sigar sigar, ServerStatus status) {
    try {
      Mem mem = sigar.getMem();
      status.setTotalMem(mem.getTotal() / (1024 * 1024));
      status.setUsedMem(mem.getUsed() / (1024 * 1024));
      status.setFreeMem(mem.getFree() / (1024 * 1024));
      // 交换区
      Swap swap = sigar.getSwap();
      status.setTotalSwap(swap.getTotal() / (1024 * 1024));
      status.setUsedSwap(swap.getUsed() / (1024 * 1024));
      status.setFreeSwap(swap.getFree() / (1024 * 1024));
    } catch (Exception e) {

    }
  }
  public static void getServerDiskInfo(Sigar sigar, ServerStatus status) {
    try {
      FileSystem fslist[] = sigar.getFileSystemList();
      FileSystemUsage usage = null;
      for (int i = 0; i < fslist.length; i++) {
        FileSystem fs = fslist[i];
        switch (fs.getType()) {
          case 0: // TYPE_UNKNOWN :未知
          case 1: // TYPE_NONE
          case 3: // TYPE_NETWORK :网络
          case 4: // TYPE_RAM_DISK :闪存
          case 5: // TYPE_CDROM :光驱
          case 6: // TYPE_SWAP :页面交换
            break;
          case 2: // TYPE_LOCAL_DISK : 本地硬盘
            ServerStatus.DiskInfoVo disk = new ServerStatus.DiskInfoVo();
            disk.setDevName(fs.getDevName());
            disk.setDirName(fs.getDirName());
            usage = sigar.getFileSystemUsage(fs.getDirName());
            disk.setTotalSize(usage.getTotal() / (1024 * 1024));
            // disk.setFreeSize(usage.getFree()/(1024*1024));
            disk.setAvailSize(usage.getAvail() / (1024 * 1024));
            disk.setUsedSize(usage.getUsed() / (1024 * 1024));
            disk.setUsePercent(usage.getUsePercent() * 100D + "%");
            disk.setTypeName(fs.getTypeName());
            disk.setSysTypeName(fs.getSysTypeName());

            String val = diskWritesAndReadsOnInit.get(fs.getDevName());
            if (val != null) {
              long timePeriod = (System.currentTimeMillis() - initTime) / 1000;
              long origRead = Long.parseLong(val.split("\\|")[0]);
              long origWrite = Long.parseLong(val.split("\\|")[1]);
              disk.setDiskReadRate((usage.getDiskReadBytes() - origRead) / timePeriod);
              disk.setDiskWriteRate((usage.getDiskWriteBytes() - origWrite) / timePeriod);
            }

            status.getDiskInfos().add(disk);
        }
      }
    } catch (Exception e) {

    }
  }
  static {
    initTime = System.currentTimeMillis();
    resetClasspath();
    Sigar sigar = null;
    try {

      sigar = new Sigar();
      FileSystem[] fslist = sigar.getFileSystemList();
      FileSystemUsage usage = null;
      for (int i = 0; i < fslist.length; i++) {
        FileSystem fs = fslist[i];
        if (fs.getType() != 2) continue;
        usage = sigar.getFileSystemUsage(fs.getDirName());
        diskWritesAndReadsOnInit.put(
            fs.getDevName(), usage.getDiskReadBytes() + "|" + usage.getDiskWriteBytes());
      }
    } catch (Exception e) {
    } finally {
      if (sigar != null) sigar.close();
    }
  }
 public SigarLibrary() {
   logger.info("Initializing SIGAR library");
   try {
     sigar = new Sigar();
     mounts = sigar.getFileSystemMap();
     initialized = true;
   } catch (SigarException e) {
     logger.info("Could not initialize SIGAR library {} ", e.getMessage());
   } catch (UnsatisfiedLinkError linkError) {
     logger.info("Could not initialize SIGAR library {} ", linkError.getMessage());
   }
 }
 private boolean hasAcceptableProcNumber() {
   try {
     long fileMax = sigar.getResourceLimit().getProcessesMax();
     if (fileMax >= EXPECTED_NPROC || fileMax == INFINITY) {
       return true;
     } else {
       return false;
     }
   } catch (SigarException sigarException) {
     logger.warn(
         "Could not determine if max processes was acceptable. Error message: {}", sigarException);
     return false;
   }
 }
 private boolean hasAcceptableFileLimits() {
   try {
     long fileMax = sigar.getResourceLimit().getOpenFilesMax();
     if (fileMax >= EXPECTED_MIN_NOFILE || fileMax == INFINITY) {
       return true;
     } else {
       return false;
     }
   } catch (SigarException sigarException) {
     logger.warn(
         "Could not determine if max open file handle limit is correctly configured. Error message: {}",
         sigarException);
     return false;
   }
 }
 private boolean isSwapEnabled() {
   try {
     Swap swap = sigar.getSwap();
     long swapSize = swap.getTotal();
     if (swapSize > 0) {
       return true;
     } else {
       return false;
     }
   } catch (SigarException sigarException) {
     logger.warn(
         "Could not determine if swap configuration is acceptable. Error message: {}",
         sigarException);
     return false;
   }
 }
  private boolean hasAcceptableAddressSpace() {
    // Check is invalid on Windows
    if (FBUtilities.isWindows()) return true;

    try {
      long fileMax = sigar.getResourceLimit().getVirtualMemoryMax();
      if (fileMax == EXPECTED_AS) {
        return true;
      } else {
        return false;
      }
    } catch (SigarException sigarException) {
      logger.warn(
          "Could not determine if VirtualMemoryMax was acceptable. Error message: {}",
          sigarException);
      return false;
    }
  }