`
wandejun1012
  • 浏览: 2719207 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java查看CPU使用率

    博客分类:
  • java
 
阅读更多

Bytes.java
class Bytes {
    public static String substring(String src, int start_idx, int end_idx){
        byte[] b = src.getBytes();
        String tgt = "";
        for(int i=start_idx; i<=end_idx; i++){
            tgt +=(char)b[i];
        }
        return tgt;
    }
}
 

MonitorInfoBean.java

public class MonitorInfoBean {
    
    /** 线程总数. */
    private int totalThread;
    
    /** cpu使用率. */
    private double cpuRatio;

    public int getTotalThread() {
        return totalThread;
    }

    public void setTotalThread(int totalThread) {
        this.totalThread = totalThread;
    }

    public double getCpuRatio() {
        return cpuRatio;
    }

    public void setCpuRatio(double cpuRatio) {
        this.cpuRatio = cpuRatio;
    }
}
 

CPU.java

package testSysinfo;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.StringTokenizer;

public class CPU {
	private static final int CPUTIME = 30;

	private static final int PERCENT = 100;

	private static final int FAULTLENGTH = 10;

	private static String linuxVersion = null;

	public double getCpuRatio() {
		// 操作系统
		String osName = System.getProperty("os.name");
		double cpuRatio = 0;
		if (osName.toLowerCase().startsWith("windows")) {
			cpuRatio = this.getCpuRatioForWindows();

		} else {
			cpuRatio = this.getCpuRateForLinux();
		}
		return cpuRatio;
	}

	/**
	 * 获得当前的监控对象.
	 * 
	 * @return 返回构造好的监控对象
	 */
	public MonitorInfoBean getMonitorInfoBean() throws Exception {

		// 操作系统
		String osName = System.getProperty("os.name");

		// 获得线程总数
		ThreadGroup parentThread;
		for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
				.getParent() != null; parentThread = parentThread.getParent())
			;
		int totalThread = parentThread.activeCount();

		double cpuRatio = 0;
		if (osName.toLowerCase().startsWith("windows")) {
			cpuRatio = this.getCpuRatioForWindows();
		} else {
			cpuRatio = this.getCpuRateForLinux();
		}

		// 构造返回对象
		MonitorInfoBean infoBean = new MonitorInfoBean();
		infoBean.setTotalThread(totalThread);
		infoBean.setCpuRatio(cpuRatio);
		return infoBean;
	}

	private static double getCpuRateForLinux() {
		InputStream is = null;
		InputStreamReader isr = null;
		BufferedReader brStat = null;
		StringTokenizer tokenStat = null;
		try {
			System.out.println("Get usage rate of CUP , linux version: "
					+ linuxVersion);

			Process process = Runtime.getRuntime().exec("top -b -n 1");
			is = process.getInputStream();
			isr = new InputStreamReader(is);
			brStat = new BufferedReader(isr);

			if (linuxVersion.equals("2.4")) {
				brStat.readLine();
				brStat.readLine();
				brStat.readLine();
				brStat.readLine();

				tokenStat = new StringTokenizer(brStat.readLine());
				tokenStat.nextToken();
				tokenStat.nextToken();
				String user = tokenStat.nextToken();
				tokenStat.nextToken();
				String system = tokenStat.nextToken();
				tokenStat.nextToken();
				String nice = tokenStat.nextToken();

				System.out.println(user + " , " + system + " , " + nice);

				user = user.substring(0, user.indexOf("%"));
				system = system.substring(0, system.indexOf("%"));
				nice = nice.substring(0, nice.indexOf("%"));

				float userUsage = new Float(user).floatValue();
				float systemUsage = new Float(system).floatValue();
				float niceUsage = new Float(nice).floatValue();

				return (userUsage + systemUsage + niceUsage) / 100;
			} else {
				brStat.readLine();
				brStat.readLine();

				tokenStat = new StringTokenizer(brStat.readLine());
				tokenStat.nextToken();
				tokenStat.nextToken();
				tokenStat.nextToken();
				tokenStat.nextToken();
				tokenStat.nextToken();
				tokenStat.nextToken();
				tokenStat.nextToken();
				String cpuUsage = tokenStat.nextToken();

				System.out.println("CPU idle : " + cpuUsage);
				Float usage = new Float(cpuUsage.substring(0, cpuUsage
						.indexOf("%")));

				return (1 - usage.floatValue() / 100);
			}

		} catch (IOException ioe) {
			System.out.println(ioe.getMessage());
			freeResource(is, isr, brStat);
			return 1;
		} finally {
			freeResource(is, isr, brStat);
		}

	}

	private static void freeResource(InputStream is, InputStreamReader isr,
			BufferedReader br) {
		try {
			if (is != null)
				is.close();
			if (isr != null)
				isr.close();
			if (br != null)
				br.close();
		} catch (IOException ioe) {
			System.out.println(ioe.getMessage());
		}
	}

	/**
	 * 获得CPU使用率.
	 * 
	 * @return 返回cpu使用率
	 */
	private double getCpuRatioForWindows() {
		try {
			String procCmd = System.getenv("windir")
					+ "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,"
					+ "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
			// 取进程信息
			long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
			Thread.sleep(CPUTIME);
			long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
			if (c0 != null && c1 != null) {
				long idletime = c1[0] - c0[0];
				long busytime = c1[1] - c0[1];
				return Double.valueOf(
						PERCENT * (busytime) / (busytime + idletime))
						.doubleValue();
			} else {
				return 0.0;
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			return 0.0;
		}
	}

	/**
	 * 
	 * 读取CPU信息.
	 * 
	 * @param proc
	 */
	private long[] readCpu(final Process proc) {
		long[] retn = new long[2];
		try {
			proc.getOutputStream().close();
			InputStreamReader ir = new InputStreamReader(proc.getInputStream());
			LineNumberReader input = new LineNumberReader(ir);
			String line = input.readLine();
			if (line == null || line.length() < FAULTLENGTH) {
				return null;
			}
			int capidx = line.indexOf("Caption");
			int cmdidx = line.indexOf("CommandLine");
			int rocidx = line.indexOf("ReadOperationCount");
			int umtidx = line.indexOf("UserModeTime");
			int kmtidx = line.indexOf("KernelModeTime");
			int wocidx = line.indexOf("WriteOperationCount");
			long idletime = 0;
			long kneltime = 0;
			long usertime = 0;
			while ((line = input.readLine()) != null) {
				if (line.length() < wocidx) {
					continue;
				}
				String caption = Bytes.substring(line, capidx, cmdidx - 1)
						.trim();
				String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();
				if (cmd.indexOf("wmic.exe") >= 0) {
					continue;
				}
				if (caption.equals("System Idle Process")
						|| caption.equals("System")) {
					idletime += Long.valueOf(
							Bytes.substring(line, kmtidx, rocidx - 1).trim())
							.longValue();
					idletime += Long.valueOf(
							Bytes.substring(line, umtidx, wocidx - 1).trim())
							.longValue();
					continue;
				}

				kneltime += Long.valueOf(
						Bytes.substring(line, kmtidx, rocidx - 1).trim())
						.longValue();
				usertime += Long.valueOf(
						Bytes.substring(line, umtidx, wocidx - 1).trim())
						.longValue();
			}
			retn[0] = idletime;
			retn[1] = kneltime + usertime;
			return retn;
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				proc.getInputStream().close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	public static void main(String[] args) throws Exception {
		CPU c = new CPU();
		while(true){
			System.out.println("cpu占有率1=" + c.getCpuRatio());
			Thread.sleep(1000*2);
		}
//		System.out.println("cpu占有率2=" + c.getCpuRatioForWindows());
	}
}
 
直接运行CPU.JAVA就可以了。
准确率还行吧,虽然不是完全和任务管理器一样的。

refurl:http://bbs.csdn.net/topics/320248202










分享到:
评论

相关推荐

    java获得CPU使用率.doc

    本文将详细介绍如何在Windows环境下使用纯Java代码(不依赖JNI)获取当前PC的CPU使用率。 #### 二、关键技术点 1. **MonitorInfoBean 类的设计**: - 该类封装了系统监控所需的主要数据,包括但不限于可使用内存...

    用java获取CPU占用率

    代码中`getCpuRateForLinux()`方法试图打开并读取`/proc/stat`,然后解析其中的数据来计算CPU的使用率。这一过程通常涉及对`user`, `nice`, `system`, `idle`, 和 `iowait`等字段的解读,这些字段代表了不同类型的...

    java 绘制CPU使用率图形 源代码

    在Java编程语言中,开发一个绘制CPU使用率图形的程序是一项技术挑战,它涉及到系统监控、图形用户界面(GUI)以及实时数据处理等多方面的知识。这个程序的主要目的是模拟任务管理器的部分功能,显示计算机的CPU使用...

    java监控linux cpu使用率

    本文将深入探讨如何使用Java来实现Linux下的CPU使用率监控。通过理解这个主题,开发者可以更好地掌握系统性能,及时发现并解决问题,确保服务的稳定运行。 首先,我们需要了解Linux系统中CPU使用率的基本概念。CPU...

    java获得CPU使用率,系统内存,虚拟机内存等情况工具类

    通过jmx可以监控vm内存使用,系统内存使用等 ,特点是通过window和linux命令获得CPU使用率。

    CPU使用率查看工具

    本文将深入探讨如何使用"CPU使用率查看工具"来有效地监测和分析设备的CPU性能。 标题中的"CPU使用率查看工具"通常是一款应用或软件,其主要功能是实时展示设备的CPU利用率,帮助用户了解设备运行时的性能状况。当...

    java获取计算机cpu利用率和内存使用

    java 获取计算机cpu利用率和内存使用信息,需要的自己下载测试吧。

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    "java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码" 在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过...

    android 获取cpu使用率, 内存 实时数据

    在Android平台上,获取CPU使用率和内存实时数据是开发者进行性能监控、优化应用或实现系统监控功能的关键步骤。本文将详细介绍如何在Android中获取这些关键信息,并提供相关的代码示例。 首先,我们要理解CPU使用率...

    java 通过jni查看windows的CPU利用率的问题

    标题“Java通过JNI查看Windows的CPU利用率的问题”涉及到的是Java编程语言如何利用Java Native Interface (JNI) 这一技术来获取Windows操作系统的CPU使用情况。JNI是Java平台标准的一部分,它允许Java代码和其他语言...

    获取cpu使用率和内存使用情况

    通常,通过操作系统提供的工具(如Windows的任务管理器或Linux的top命令)可以查看CPU使用率。在编程中,可以使用各种库来获取这些数据,例如在Python中可以使用psutil库。 2. **内存使用情况**: 内存使用情况...

    Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

    本文实例讲述了Android编程实现获取系统内存、CPU使用率及状态栏高度的方法。分享给大家供大家参考,具体如下: DeviceInfoManage类用于获取系统的内存,CPU的信息,以及状态栏的高度 import java.io.BufferedReader...

    测量Java应用程序的CPU和内存占用率

    通过JNI,我们可以编写特定于操作系统的C/C++代码来调用系统调用,获取关于CPU使用率和内存占用的数据,然后将这些信息传递回Java应用程序。相比依赖于解析操作系统特定的命令行工具(如Unix的`ps`命令)输出,这种...

    Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等

    本文将详细讲解如何利用Java获取CPU使用率、硬盘大小、网卡状态以及系统信息,并结合给定的文件资源进行讨论。 首先,我们需要引入一个名为Sigar(System Information Gatherer and Reporter)的库,它是一个跨平台...

    通过snmp的OID获取对方主机的内存利用率及CPU的使用率

    在本场景中,我们的目标是利用SNMP来获取远程主机的内存利用率和CPU使用率,这对于网络性能监控和故障排查至关重要。 首先,我们需要了解SNMP的基本工作原理。SNMP由三部分组成:管理站(Manager)、代理(Agent)...

    模拟CPU使用率曲线

    在IT领域,模拟CPU使用率曲线是一项重要的性能监控任务,它可以帮助我们理解系统的负载情况,优化资源分配,以及排查性能问题。"模拟CPU利用率的曲线"这个项目提供了一个直观的工具,其效果与Windows系统内置的性能...

    java使用sigar检测CPU占用率

    Sigar有C,C#,Java和Perl API,java版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar 依赖sigar-amd64-winnt.dll或sigar-x86-...

    java在cpu的占有率

    它循环打印出 Java 应用程序的 CPU 使用率、JVM 总内存大小以及剩余内存等信息。 ### 总结 以上代码展示了如何通过 Java 获取系统的监控信息,包括 CPU 使用率、内存使用情况等,并且针对不同操作系统提供了不同的...

Global site tag (gtag.js) - Google Analytics