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(); } }