Java 获得CPU占有率

Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件。它用来从许多平台收集系统和处理信息.
这些平台包括:Linux, Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX.
Sigar有C,C#,Java和Perl API,java版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar 依赖sigar-amd64-winnt.dll或sigar-x86-winnt.dll,linux 操作系统下则依赖libsigar-amd64-linux.so或libsigar-x86-linux.so
Hyperic-hq官方网站:http://www.hyperic.com

Sigar.jar下载地址:http://sigar.hyperic.com

public class Cpu {
	
	public static void main(String[] args) throws IOException {
		Cpu cpuutil = new Cpu();
		try {
			System.out.println(cpuutil.cpu());//CPU占用率
			System.out.println(cpuutil.file());//盘符占用率 除C盘外
			System.out.print("cpu.exec 占有率为");
			System.out.println(cpuutil.getCpuLoadPercentage());//cpu占用率
		} catch (SigarException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	//得到CPU的占用率
	public Double cpu() throws SigarException{
		Sigar sigar = new Sigar();
		CpuInfo infos[] = sigar.getCpuInfoList();
		CpuPerc precList[] = sigar.getCpuPercList();
		Double allCom = 0.0;
		int j = 0;
		for(int i=0;i<infos.length;i++){
			CpuInfo info = infos[i];
			System.out.println("第"+(i+1)+"块cpu信息。");
			System.out.println("CPU的总量MHz"+info.getMhz());
			System.out.println("CPU生产商"+info.getVendor());
			System.out.println("CPU类别"+info.getModel());
			System.out.println("CPU缓存数量"+info.getCacheSize());
			System.out.println("CPU用户使用率:    " + CpuPerc.format(precList[i].getUser()));// 用户使用率
	        System.out.println("CPU系统使用率:    " + CpuPerc.format(precList[i].getSys()));// 系统使用率
	        System.out.println("CPU当前等待率:    " + CpuPerc.format(precList[i].getWait()));// 当前等待率
	        System.out.println("CPU当前错误率:    " + CpuPerc.format(precList[i].getNice()));//
	        System.out.println("CPU当前空闲率:    " + CpuPerc.format(precList[i].getIdle()));// 当前空闲率
	        System.out.println("CPU总的使用率:    " + CpuPerc.format(precList[i].getCombined()));// 总的使用率	
			j=i;
			allCom += precList[i].getCombined();
		}
		// System.out.println("4个CPU总的使用率:    " + CpuPerc.format(allCom/4));// 总的使用率
		return allCom/j;
	}
	//盘符操作
	public String file() throws SigarException{
		Sigar sigar = new Sigar();
		FileSystem fslist[] =  sigar.getFileSystemList();
		Gson gson = new Gson();
		 Map<String, String> resMap = new HashMap<>();
		 List<Map<String, String>> lm = new ArrayList<>();
		for (int i = 0; i < fslist.length; i++) {
            //System.out.println("分区的盘符名称" + (i+1));
            FileSystem fs = fslist[i];
            // 分区的盘符名称
           // System.out.println("盘符名称:    " + fs.getDevName());
            // 分区的盘符名称
            //System.out.println("盘符路径:    " + fs.getDirName());
            //System.out.println("盘符标志:    " + fs.getFlags());
            // 文件系统类型,比如 FAT32、NTFS
            //System.out.println("盘符类型:    " + fs.getSysTypeName());
            // 文件系统类型名,比如本地硬盘、光驱、网络文件系统等
            //System.out.println("盘符类型名:    " + fs.getTypeName());
            // 文件系统类型
           // System.out.println("盘符文件系统类型:    " + fs.getType());
            if(!"C:\\".equals(fs.getDevName())){
            FileSystemUsage usage = null;
            usage = sigar.getFileSystemUsage(fs.getDirName());
            switch (fs.getType()) {
            case 0: // TYPE_UNKNOWN :未知
                break;
            case 1: // TYPE_NONE String DevName;
                break;
            case 2: // TYPE_LOCAL_DISK : 本地硬盘
            	resMap.put("name", fs.getDevName());
            	resMap.put("Total", String.valueOf(usage.getTotal()));//总大小
            	resMap.put("Free", String.valueOf(usage.getFree()));//剩余大小
            	resMap.put("Avail", String.valueOf(usage.getAvail()));//可用大小
            	resMap.put("Used", String.valueOf(usage.getUsed()));//已经使用量
            	lm.add(resMap);
                // 文件系统总大小
                //System.out.println(fs.getDevName() + "总大小:    " + usage.getTotal() + "KB");
                // 文件系统剩余大小
               // System.out.println(fs.getDevName() + "剩余大小:    " + usage.getFree() + "KB");
                // 文件系统可用大小
               // System.out.println(fs.getDevName() + "可用大小:    " + usage.getAvail() + "KB");
                // 文件系统已经使用量
               // System.out.println(fs.getDevName() + "已经使用量:    " + usage.getUsed() + "KB");
               // double usePercent = usage.getUsePercent() * 100D;
                // 文件系统资源的利用率
                //System.out.println(fs.getDevName() + "资源的利用率:    " + usePercent + "%");
                break;
            case 3:// TYPE_NETWORK :网络
                break;
            case 4:// TYPE_RAM_DISK :闪存
                break;
            case 5:// TYPE_CDROM :光驱
                break;
            case 6:// TYPE_SWAP :页面交换
                break;
            }
            System.out.println(fs.getDevName() + "读出:    " + usage.getDiskReads());
            System.out.println(fs.getDevName() + "写入:    " + usage.getDiskWrites());
        }
	}
		return gson.toJson(lm);
	}
	/* cmd 方式得到CPU的占用率 */ 
	 public double getCpuLoadPercentage() throws IOException {
		    Process process = Runtime.getRuntime().exec("wmic cpu get LoadPercentage" );
		    InputStream is = process.getInputStream();
		    BufferedReader br = new BufferedReader(new InputStreamReader(is, "GBK"));
		    br.readLine(); // 舍弃标题行
		    br.readLine(); // 舍弃标题行下空行
		    String percentageLine = br.readLine();
		    if (percentageLine == null) {
		      return 0;
		    }
		    return Double.parseDouble(percentageLine.trim());
		  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值