Java获取系统信息

/**
 * @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

下载地址 : 

你可能感兴趣的:(java,java,sigar,sigar,获取系统信息)