java 获取linux内存,linux下用java程序获取cpu和内存的使用率(转)

http://hi.baidu.com/qmiao128/blog/item/fa91b41f1b6c1f61f724e424.html

项目组张布置说是要在linux实验平台上获取cpu和内存的使用率,刚开始想的是用jni调用本地方法,但是感觉这个方法太麻烦,主要也是对jni不怎么熟悉。后来在网上查到这个方法,经过改装,运行成功。

在这个程序中,我将getCpuUsage和getMemUsage两个方法封装到MySystem这个类中,声明为静态方法,这样可以直接通过类来调用方法,而不必创建新的对象。

这个程序主要还是针对我们实验平台linux系统来做的,如果要运行到其他的linux需要一定的修改。

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class MySystem {

public static double getCpuUsage() throws Exception {

double cpuUsed = 0;

double idleUsed = 0.0;

Runtime rt = Runtime.getRuntime();

Process p = rt.exec("top -b -n 1");// call "top" command in linux

BufferedReader in = null;

// try

{

in = new BufferedReader(new InputStreamReader(p.getInputStream()));

//    in = new BufferedReader(new InputStreamReader(System.in));

String str = null;

int linecount = 0;

while ((str = in.readLine()) != null) {

linecount++;

if (linecount == 3) {

String[] s = str.split("%");

String idlestr = s[3];

String idlestr1[] = idlestr.split(" ");

idleUsed = Double.parseDouble(idlestr1[idlestr1.length-1]);

//   System.out.println("IdleUsed:XXXXXXXXXXXX"+idleUsed);

cpuUsed = 100-idleUsed;

//   System.out.println(cpuUsed);

break;

}

}

// System.out.println(str);

}

//   }

/*

}

catch (Exception e) {

e.printStackTrace();

} finally {

in.close();

}*/

return cpuUsed;

}

public static double getMemUsage() throws Exception {

long memUsed = 0;

long memTotal = 0;

double memUsage = 0.0;

Runtime rt = Runtime.getRuntime();

Process p = rt.exec("top -b -n 1");// call "top" command in linux

BufferedReader in = null;

// try

{

in = new BufferedReader(new InputStreamReader(p.getInputStream()));

//    in = new BufferedReader(new InputStreamReader(System.in));

String str = null;

int linecount = 0;

while ((str = in.readLine()) != null) {

linecount++;

if (linecount == 4) {

String[] s = str.split("k ");

String memUsedstr = s[1];

String memTotalstr = s[0];

String memUsedstr1[] = memUsedstr.split(" ");

memUsed = Long.parseLong(memUsedstr1[memUsedstr1.length-1]);

String memTotalstr1[] = memTotalstr.split(" ");

memTotal = Long.parseLong(memTotalstr1[memTotalstr1.length-1]);

//   System.out.println("IdleUsed:XXXXXXXXXXXX"+idleUsed);

memUsage = memUsed*100/memTotal;

//   System.out.println(memUsed+"\n"+memTotal);

//   System.out.println(memUsage);

//   System.out.println(cpuUsed);

break;

}

}

// System.out.println(str);

}

//   }

/*

}

catch (Exception e) {

e.printStackTrace();

} finally {

in.close();

}*/

return memUsage;

}public static void main(String []args)

{

try

{

System.out.println(MySystem.getCpuUsage());

System.out.println(MySystem.getMemUsage());

}

catch(Exception e)

{

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值