`
wangrui
  • 浏览: 186561 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Sigar使用之:取得系统CPU的基本信息和使用率

阅读更多
我们经常有这样的需求,想得到系统CPU的基本信息、使用率等等。使用Sigar可以很好的完成这一需求。

通过Sigar我们可以获得CPU的基本信息有:vendor、model、mhz、cacheSize;CPU的统计信息有:user进程占用的百分比、sys进程占用的百分比、nice进程占用的百分比、idle进程占用的百分比、wait进程占用的百分比。

下面通过例子说明用法:

package lab.sigar;

import org.hyperic.sigar.Cpu;
import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

import com.thoughtworks.xstream.XStream;

/**
 * Cpu数据
 * 
 * 使用Sigar获得CPU的基本信息、使用百分比、使用时间
 * 
 */
public class CpuData {
	private CpuInfo info;
	private CpuPerc perc;
	private Cpu timer;

	public CpuData() {
	}

	public void populate(Sigar sigar) throws SigarException {
		info = sigar.getCpuInfoList()[0];
		perc = sigar.getCpuPerc();
		timer = sigar.getCpu();
	}

	public static CpuData gather(Sigar sigar) throws SigarException {
		CpuData data = new CpuData();
		data.populate(sigar);
		return data;
	}

	public static void main(String[] args) throws Exception {
		Sigar sigar = new Sigar();
		CpuData cpuData = CpuData.gather(sigar);
		XStream xstream = new XStream();
		xstream.alias("CpuData", CpuData.class);
		System.out.println(xstream.toXML(cpuData));
	}

}


输出:
<CpuData>
  <info>
    <vendor>Intel</vendor>
    <model>Pentium M</model>
    <mhz>1862</mhz>
    <cacheSize>-1</cacheSize>
  </info>
  <perc>
    <user>0.12574850299401197</user>
    <sys>0.031936127744510975</sys>
    <nice>0.0</nice>
    <idle>0.8423153692614771</idle>
    <wait>0.0</wait>
  </perc>
  <timer>
    <user>932250</user>
    <sys>520375</sys>
    <nice>0</nice>
    <idle>6366031</idle>
    <wait>0</wait>
    <total>7818656</total>
  </timer>
</CpuData>


2
0
分享到:
评论
2 楼 evangelionxb 2011-05-12  
import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.SigarException;

public class CpuState extends AppBase{

public CpuState(SigarBase sigarBase) {
super(sigarBase);
// TODO Auto-generated constructor stub
}

public CpuState(){
super();
}

private void output(CpuPerc cpuPerc){
        System.out.println("User Time....." + CpuPerc.format(cpuPerc.getUser()));
        System.out.println("Sys Time......" + CpuPerc.format(cpuPerc.getSys()));
        System.out.println("Idle Time....." + CpuPerc.format(cpuPerc.getIdle()));
        System.out.println("Wait Time....." + CpuPerc.format(cpuPerc.getWait()));
        System.out.println("Nice Time....." + CpuPerc.format(cpuPerc.getNice()));
        System.out.println("Combined......" + CpuPerc.format(cpuPerc.getCombined()));
        System.out.println("Irq Time......" + CpuPerc.format(cpuPerc.getIrq()));
       
        System.out.println("");
}


public void print(){
try {
CpuInfo[] cpuInfos = this.sigarProxy.getCpuInfoList();

System.out.println("Model: " + cpuInfos[0].getModel());
System.out.println("Vendor: " + cpuInfos[0].getVendor());
System.out.println("Mhz: " + cpuInfos[0].getMhz());
System.out.println();

CpuPerc[] cpuPercs = this.sigarProxy.getCpuPercList();
for(int i=0;i<cpuPercs.length;i++){
System.out.println("CPU "+(i+1));
output(cpuPercs[i]);
}

} catch (SigarException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static void main(String[] args) {
new CpuState().print();

}

}

楼主有机会交流下
1 楼 banditgao 2008-12-08  


楼主我看了这个项目了,代码确实好使,这个项目也确实不错。

但是我发现在ECLIPSE 里 RUN 带MAIN的能出结果,但是在WEB中,在ECLIPSE RCP中调用始终找不到类,报这个错误:

java.lang.NoClassDefFoundError: org/hyperic/sigar/Sigar

这个怎么办啊?试了好多办法都不行,楼主能否写个小小的例子工程,在GUI界面或者JSP调用SIGAR获得硬件信息啊?

如果可能请留个MSN啊。我邮箱sc-gameboy@163.com,谢谢楼主啊

相关推荐

Global site tag (gtag.js) - Google Analytics