sigar相关-单个进程占CPU百分比

J2EE 码拜 9年前 (2015-04-02) 1980次浏览 0个评论

想得到针对每一个进程的占CPU的百分比,但是用getpercent()这个打印出来老是0.0。上网搜了好久也没有搜到用java写的得到单个进程占CPU百分比的例子。第一次接触这些东西所以懂得不多,求帮助T_T……最后再次谢谢!还有如果有数据了值也对不上。sleep有加,但也是没多大效果。

               Sigar sigar = new Sigar();
		long pid = sigar.getPid();
		int sleep_time = 100;
		SigarProxy sigars = SigarProxyCache.newInstance(sigar, sleep_time);
		ProcCpu cpuu;
		try {
			ProcCpu cpu = sigars.getProcCpu(pid);
			cpu.getPercent();   //it return 0.0 first
			Thread.sleep(sleep_time);
			cpuu = sigar.getProcCpu(pid);
			System.out.println(cpuu.getPercent());
		} catch (Exception e) {
			e.printStackTrace();
		}
sigar相关-单个进程占CPU百分比
20分
	public static void main(String[] args) throws SigarException {

		final Random rand = new Random();

		new Thread() {

			public void run() {

				while(true) {

					if(rand.nextBoolean()) {

						for (int i = 0, l = 10000000; i < l; i++) {
							rand.nextDouble();
						}

					} else {

						try {
							Thread.sleep(1000L);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

					}
				}
			}

		}.start();

		NumberFormat format = new DecimalFormat("0");
		Sigar sigar = new Sigar();
		long pid = sigar.getPid(); //javaw的pid 或者注释掉上边的Thread,在资源管理器看pid
		int availableProcessors = Runtime.getRuntime().availableProcessors();

		while (true) {

			System.out.println(format.format(sigar.getProcCpu(pid).getPercent() / availableProcessors * 100) + ""%"");

			try {
				Thread.sleep(1000L);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}
sigar相关-单个进程占CPU百分比
引用 1 楼 chenjing0320 的回复:
	public static void main(String[] args) throws SigarException {

		final Random rand = new Random();

		new Thread() {

			public void run() {

				while(true) {

					if(rand.nextBoolean()) {

						for (int i = 0, l = 10000000; i < l; i++) {
							rand.nextDouble();
						}

					} else {

						try {
							Thread.sleep(1000L);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

					}
				}
			}

		}.start();

		NumberFormat format = new DecimalFormat("0");
		Sigar sigar = new Sigar();
		long pid = sigar.getPid(); //javaw的pid 或者注释掉上边的Thread,在资源管理器看pid
		int availableProcessors = Runtime.getRuntime().availableProcessors();

		while (true) {

			System.out.println(format.format(sigar.getProcCpu(pid).getPercent() / availableProcessors * 100) + ""%"");

			try {
				Thread.sleep(1000L);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}

你给的方案可行。但是有一个问题请教,就是里面的数据貌似有时候不稳定,有时候CPU使用率会超过100%,比如1000%,请问这是什么原因的导致的?

sigar相关-单个进程占CPU百分比
引用 2 楼 lewis121 的回复:
Quote: 引用 1 楼 chenjing0320 的回复:
	public static void main(String[] args) throws SigarException {

		final Random rand = new Random();

		new Thread() {

			public void run() {

				while(true) {

					if(rand.nextBoolean()) {

						for (int i = 0, l = 10000000; i < l; i++) {
							rand.nextDouble();
						}

					} else {

						try {
							Thread.sleep(1000L);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

					}
				}
			}

		}.start();

		NumberFormat format = new DecimalFormat("0");
		Sigar sigar = new Sigar();
		long pid = sigar.getPid(); //javaw的pid 或者注释掉上边的Thread,在资源管理器看pid
		int availableProcessors = Runtime.getRuntime().availableProcessors();

		while (true) {

			System.out.println(format.format(sigar.getProcCpu(pid).getPercent() / availableProcessors * 100) + ""%"");

			try {
				Thread.sleep(1000L);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}

你给的方案可行。但是有一个问题请教,就是里面的数据貌似有时候不稳定,有时候CPU使用率会超过100%,比如1000%,请问这是什么原因的导致的?

1000%没遇到过啊,我测的最多就100%

sigar相关-单个进程占CPU百分比
引用 3 楼 chenjing0320 的回复:
Quote: 引用 2 楼 lewis121 的回复:
Quote: 引用 1 楼 chenjing0320 的回复:
	public static void main(String[] args) throws SigarException {

		final Random rand = new Random();

		new Thread() {

			public void run() {

				while(true) {

					if(rand.nextBoolean()) {

						for (int i = 0, l = 10000000; i < l; i++) {
							rand.nextDouble();
						}

					} else {

						try {
							Thread.sleep(1000L);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

					}
				}
			}

		}.start();

		NumberFormat format = new DecimalFormat("0");
		Sigar sigar = new Sigar();
		long pid = sigar.getPid(); //javaw的pid 或者注释掉上边的Thread,在资源管理器看pid
		int availableProcessors = Runtime.getRuntime().availableProcessors();

		while (true) {

			System.out.println(format.format(sigar.getProcCpu(pid).getPercent() / availableProcessors * 100) + ""%"");
			System.out.println(format.format(sigar.getProcCpu(pid).getPercent() / availableProcessors * 100) + ""%"");//该数据无效,都是0
			try {
				Thread.sleep(1000L);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}

你给的方案可行。但是有一个问题请教,就是里面的数据貌似有时候不稳定,有时候CPU使用率会超过100%,比如1000%,请问这是什么原因的导致的?

1000%没遇到过啊,我测的最多就100%

还有一个问题噢,sigar.getProcCpu(pid).getPercent() ;如果再输出一遍。貌似数据不对,几乎都是0。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明sigar相关-单个进程占CPU百分比
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!