2.Sigar获取CPU信息

CPU的基本信息有:vendor、model、mhz、cacheSize;

CPU的统计信息有:user进程占用的百分比、sys进程占用的百分比、nice进程占用的百分比、idle进程占用的百分比、wait进程占用的百分比。

Java代码:

使用的Jar包:sigar.jar、xstream-1.3.1.jar

package test1;

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的基本信息、使用百分比、使用时间
 */
public class CpuInfoData {
	private CpuInfo info;
	private CpuPerc perc;
	private Cpu timer;

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

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

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

	public CpuInfo getInfo() {
		return info;
	}

	public void setInfo(CpuInfo info) {
		this.info = info;
	}

	public CpuPerc getPerc() {
		return perc;
	}

	public void setPerc(CpuPerc perc) {
		this.perc = perc;
	}

	public Cpu getTimer() {
		return timer;
	}

	public void setTimer(Cpu timer) {
		this.timer = timer;
	}

}

输出:

<CpuInfoData>
  <info>
    <vendor>Intel</vendor>
    <model>Pentium(R) CPU G850 @ 2.90GHz</model>
    <mhz>2892</mhz>
    <cacheSize>-1</cacheSize>
    <totalCores>2</totalCores>
    <totalSockets>2</totalSockets>
    <coresPerSocket>1</coresPerSocket>
  </info>
  <perc>
    <user>0.11022044088176353</user>
    <sys>0.09318637274549098</sys>
    <nice>0.0</nice>
    <idle>0.7965931863727455</idle>
    <wait>0.0</wait>
    <irq>0.0</irq>
    <softIrq>0.0</softIrq>
    <stolen>0.0</stolen>
    <combined>0.2034068136272545</combined>
  </perc>
  <timer>
    <user>6815574</user>
    <sys>4927446</sys>
    <nice>0</nice>
    <idle>38219136</idle>
    <wait>0</wait>
    <irq>110073</irq>
    <softIrq>0</softIrq>
    <stolen>0</stolen>
    <total>74943593</total>
  </timer>
</CpuInfoData>

Java代码:

package test3;

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

/**
 * Display cpu information for each cpu found on the system.
 */
public class CpuInfoTest {
	private Sigar sigar = new Sigar();

	private void output(CpuPerc cpu) {
		System.out.println("User Time....." + CpuPerc.format(cpu.getUser()));// 用户态使用的CPU百分比
		System.out.println("Sys Time......" + CpuPerc.format(cpu.getSys()));// 系统态使用的CPU百分比
		System.out.println("Idle Time....." + CpuPerc.format(cpu.getIdle()));// CPU空闲时间
		System.out.println("Wait Time....." + CpuPerc.format(cpu.getWait()));// CPU等待时间
		System.out.println("Nice Time....." + CpuPerc.format(cpu.getNice()));//
		System.out.println("Combined......" + CpuPerc.format(cpu.getCombined()));// User Time + Sys Time
		System.out.println("Irq Time......" + CpuPerc.format(cpu.getIrq()));// CPU中断时间
		if (SigarLoader.IS_LINUX) {
			System.out.println("SoftIrq Time.." + CpuPerc.format(cpu.getSoftIrq()));// 软中断CPU时间
			System.out.println("Stolen Time...." + CpuPerc.format(cpu.getStolen()));
		}
		System.out.println("");
	}

	public void output(String[] args) throws SigarException {
		CpuInfo[] infos = this.sigar.getCpuInfoList();//
		CpuInfo info = infos[0];
		System.out.println("Vendor........." + info.getVendor());// 芯片供应商
		System.out.println("Model.........." + info.getModel());// CPU型号
		System.out.println("Mhz............" + info.getMhz());// 主频
		System.out.println("Total CPUs....." + info.getTotalCores());// CPU逻辑个数

		if ((info.getTotalCores() != info.getTotalSockets()) || (info.getCoresPerSocket() > info.getTotalCores())) {
			System.out.println("Physical CPUs.." + info.getTotalSockets());// CPU物理个数
			System.out.println("Cores per CPU.." + info.getCoresPerSocket());// 每个CPU核数
		}

		long cacheSize = info.getCacheSize();
		if (cacheSize != Sigar.FIELD_NOTIMPL) {
			System.out.println("Cache size...." + cacheSize);// 缓存
		}
		System.out.println("");

		// 每个核使用情况
		CpuPerc[] cpus = this.sigar.getCpuPercList();
		for (int i = 0; i < cpus.length; i++) {
			System.out.println("CPU " + i + ".........");
			output(cpus[i]);
		}

		// 整个CPU使用情况
		System.out.println("Totals........");
		output(this.sigar.getCpuPerc());
	}

	public static void main(String[] args) throws Exception {
		new CpuInfoTest().output(args);
	}
}

输出:

Vendor.........Intel
Model..........Pentium(R) CPU G850 @ 2.90GHz
Mhz............2892
Total CPUs.....2

CPU 0.........
User Time.....6.2%
Sys Time......9.2%
Idle Time.....84.5%
Wait Time.....0.0%
Nice Time.....0.0%
Combined......15.4%
Irq Time......0.0%

CPU 1.........
User Time.....3.2%
Sys Time......6.2%
Idle Time.....90.6%
Wait Time.....0.0%
Nice Time.....0.0%
Combined......9.4%
Irq Time......0.0%

Totals........
User Time.....9.3%
Sys Time......18.8%
Idle Time.....71.8%
Wait Time.....0.0%
Nice Time.....0.0%
Combined......28.1%
Irq Time......0.0%
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值