通过Hyperic-hq产品的基础包sigar.jar来实现服务器状态数据的获取。Sigar.jar包是通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar依赖sigar-amd64-winnt.dll或sigar-x86-winnt.dll,linux 操作系统下则依赖libsigar-amd64-linux.so或libsigar-x86-linux.so……而Sigar.jar还依赖于jug-asl-2.0.0.jar、log4j-1.2.14.jar、Junit.jar,
Hyperic-hq官方网站:http://www.hyperic.com
Sigar.jar下载地址:https://support.hyperic.com/display/SIGAR/Home
下载的源码包中有各种语言的example:
Sigar.jar包的使用方法:
1、 CPU资源信息
a) CPU数量(单位:个)
privatestaticint getCpuCount() throws SigarException {
Sigar sigar = new Sigar();
try {
return sigar.getCpuInfoList().length;
} finally {
sigar.close();
}
}
b) CPU的总量(单位:HZ)及CPU的相关信息
Sigar sigar = getSigar();
CpuInfo infos[] = sigar.getCpuInfoList();
for (int i = 0; i < infos.length; i++) {
//不管是单块CPU还是多CPU都适用
CpuInfo info = infos[i];
traceln("mhz=" + info.getMhz());//CPU的总量MHz
traceln("vendor=" + info.getVendor());//获得CPU的卖主,如:Intel
traceln("model=" + info.getModel());//获得CPU的类别,如:Celeron
traceln("cache size=" + info.getCacheSize());//缓冲存储器数量
}
c) CPU的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等(单位:100%)
publicvoid testCpuPerc() {
Sigar sigar = new Sigar();
// 方式一,主要是针对一块CPU的情况
CpuPerc cpu;
try {
cpu = sigar.getCpuPerc();
printCpuPerc(cpu);
} catch (SigarException e) {
e.printStackTrace();
}
// 方式二,不管是单块CPU还是多CPU都适用
CpuPerc cpuList[] = null;
try {
cpuList = sigar.getCpuPercList();
} catch (SigarException e) {
e.printStackTrace();
return;
}
for (int i = 0; i < cpuList.length; i++) {
printCpuPerc(cpuList[i]);
}
}
privatevoid printCpuPerc(CpuPerc cpu) {
println("User :" + CpuPerc.format(cpu.getUser()));// 用户使用率
println("Sys :" + CpuPerc.format(cpu.getSys()));// 系统使用率
println("Wait :" + CpuPerc.format(cpu.getWait()));// 当前等待率
println("Nice :" + CpuPerc.format(cpu.getNice()));//
println("Idle :" + CpuPerc.format(cpu.getIdle()));// 当前空闲率
println("Total :" + CpuPerc.format(cpu.getCombined()));// 总的使用率
}
d) ……
2、 内存资源信息
a) 物理内存信息
Sigar sigar = new Sigar();
Mem mem = sigar.getMem();
// 内存总量
System.out.println("Total = " + mem.getTotal() / 1024L + "K av");
// 当前内存使用量
System.out.println("Used = " + mem.getUsed() / 1024L +