/**
   * 返回服务系统信息
   *
   * @throws Exception
   */
  public static ServerStatus getServerStatus() throws Exception {
    ServerStatus status = new ServerStatus();
    status.setServerTime(DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
    status.setServerName(System.getenv().get("COMPUTERNAME"));

    Runtime rt = Runtime.getRuntime();
    // status.setIp(InetAddress.getLocalHost().getHostAddress());
    status.setJvmTotalMem(rt.totalMemory() / (1024 * 1024));
    status.setJvmFreeMem(rt.freeMemory() / (1024 * 1024));
    status.setJvmMaxMem(rt.maxMemory() / (1024 * 1024));
    Properties props = System.getProperties();
    status.setServerOs(
        props.getProperty("os.name")
            + " "
            + props.getProperty("os.arch")
            + " "
            + props.getProperty("os.version"));
    status.setJavaHome(props.getProperty("java.home"));
    status.setJavaVersion(props.getProperty("java.version"));
    status.setJavaTmpPath(props.getProperty("java.io.tmpdir"));

    Sigar sigar = new Sigar();
    getServerCpuInfo(sigar, status);
    getServerDiskInfo(sigar, status);
    getServerMemoryInfo(sigar, status);

    return status;
  }
 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 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) {

    }
  }
  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) {

    }
  }