系统运维
957
/** * @version 1.0 * @author 勋辉 * @createDate 2014年3月15日 上午10:02:18 * @since JDK1.6 * * */ package com.topwalk.moc.etl.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; import org.hyperic.sigar.Mem; import org.hyperic.sigar.Sigar; import org.hyperic.sigar.SigarException; public class SystemInfoUtils { private static Logger logger = Logger.getLogger(SystemInfoUtils.class); public static void main(String[] args) { getDiskInfo(); } /** * 获取CPU使用率 * @Title: getCpuPerc * @return double * @exception 异常 * @throws * @see 需要参见的其它内容 * @since ISSP v1.5 * @author 勋辉 * @time 2014年3月15日上午10:40:21 */ public static double getCpuPerc(){ Sigar sigar = new Sigar(); CpuPerc cpuPerc[] =null; double result =0d; try { /* CPU 信息列表 */ cpuPerc=sigar.getCpuPercList(); List<BigDecimal> list = new ArrayList<BigDecimal>(); /* 获取每颗CPU的总共使用量 */ for (int i = 0; i < cpuPerc.length; i++) { printCpuInfo(cpuPerc[i],i); BigDecimal b = new BigDecimal(Double.toString(cpuPerc[i].getCombined())); list.add(b); } /* 相加 */ BigDecimal add = list.get(0); for (int i = 1; i < list.size(); i++) { add=add.add(list.get(i)); } /* 求平均值 */ result = add.divide(new BigDecimal(list.size()),2,RoundingMode.HALF_EVEN).doubleValue(); } catch (SigarException e) { logger.error("[获取CPU使用率失败]",e); } return result; } private static void printCpuInfo(CpuPerc cpuPerc,int i ){ logger.debug("[ CPU"+i+" ]总共使用率:"+CpuPerc.format(cpuPerc.getCombined())+" ]"); } /** * 获取内存信息 * @Title: getPhysicalMemory * @param * @return void * @exception 异常 * @throws * @see 需要参见的其它内容 * @since ISSP v1.5 * @author 勋辉 * @time 2014年3月15日上午10:50:55 */ public static double getPhysicalMemory(){ double result = 0d; Sigar sigar = new Sigar(); Mem men = null; try { men=sigar.getMem(); logger.debug("[系统内存总量:"+men.getTotal()/1024L+"k]"); logger.debug("[系统内存用量:"+men.getUsed()/1024L+"k]"); logger.debug("[使用率百分比:"+men.getUsedPercent()+"]"); BigDecimal userPrect = new BigDecimal(men.getUsedPercent()); result = userPrect.divide(new BigDecimal(1),2,RoundingMode.HALF_EVEN).doubleValue(); } catch (SigarException e) { logger.error("[获取系统内存使用率]",e); } return result; } /** * 获取磁盘信息 * @Title: getDiskInfo * @param * @return void * @exception 异常 * @throws * @see 需要参见的其它内容 * @since ISSP v1.5 * @author 勋辉 * @time 2014年3月15日上午11:47:06 */ public static double getDiskInfo(){ double result = 0d; BigDecimal total = new BigDecimal(0); BigDecimal used = new BigDecimal(0); Sigar sigar = new Sigar(); try { FileSystem fslist[] = sigar.getFileSystemList(); // String dir = System.getProperty("user.home");// 当前用户文件夹路径 for (int i = 0; i < fslist.length; i++) { FileSystem fs = fslist[i]; FileSystemUsage usage = null; try { usage = sigar.getFileSystemUsage(fs.getDirName()); } catch (SigarException e) { if (fs.getType() == 2) continue; } switch (fs.getType()) { case 0: // TYPE_UNKNOWN :未知 break; case 1: // TYPE_NONE break; case 2: // TYPE_LOCAL_DISK : 本地硬盘 // 文件系统总大小 total= total.add(new BigDecimal((float)usage.getTotal()/1024/1024)); // 文件系统已经使用量 used=used.add(new BigDecimal((float)usage.getUsed()/1024/1024)); break; case 3:// TYPE_NETWORK :网络 break; case 4:// TYPE_RAM_DISK :闪存 break; case 5:// TYPE_CDROM :光驱 break; case 6:// TYPE_SWAP :页面交换 break; } } } catch (SigarException e) { e.printStackTrace(); } result=used.divide(total,2,RoundingMode.HALF_EVEN).doubleValue(); return result; } }
API地址:http://www.hyperic.com/support/docs/sigar/org/hyperic/sigar/Sigar.html
主页 : https://support.hyperic.com/display/SIGAR/Home
下载地址 :
广告