大家好,我是Sigar。也许好多人还不认识我。下面就介绍一下我自己,好让大家对我有一个大致的了解。
我的全名是System Information Gatherer And Reporter,中文名是系统信息收集和报表工具。我是一个开源的工具,提供了跨平台的系统信息收集的API,我可以收集的信息包括:
1.操作系统的信息,包括:dataModel、cpuEndian、name、version、arch、machine、description、patchLevel、vendor、vendorVersion、vendorName、vendorCodeName
2.CPU信息,包括:基本信息(vendor、model、mhz、cacheSize)和统计信息(user、sys、idle、nice、wait)
3.内存信息,物理内存和交换内存的总数、使用数、剩余数;RAM的大小
4.进程信息,包括每个进程的内存、CPU占用数、状态、参数、句柄等。
5.文件系统信息,包括名称、容量、剩余数、使用数、分区类型等
6.网络接口信息,包括基本信息和统计信息。
7.网络路由和链接表信息。
哈哈,够全了吧。另外我的性格比较外向,可以和绝大多数操作系统和大多数版本打交道。
当然了我的底层接口是用C语言写的。
好了,如果大家还想了较更多的信息可以去我的网站http://sigar.hyperic.com/
Sigar获取CPU的基本信息
sigar所需要的文件 下载地址
Sigar还可以结合amcharts插件在页面展现服务器相关信息,详细点击amcharts
_ 2.7.6 实现动态数据展现
使用sigar其实很简单,首先要在项目中添加sigar.jar以及对应系统的
库文件(xp为例,添加pdh.dll、sigar-x86-winnt.dll、sigar-x86-winnt.lib)
sigar包以及库文件下载地址:http://download.csdn.net/source/2344017
//接口定义
public interface LoadInfo {
//获取cpu使用率
public String getCpuInfo();
// 获取系统内存使用量
public String getRamInfo();
//获取网络使用流量
public String getNetworkInfo();
//获取操作系统信息
public String getSystemInfo();
// 获取运行环境信息
public String getRunLoadInfo();
//获取虚拟机剩余内存
public String getVmRamInfo();
}
//以下是接口的实现
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.Properties;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.NetInterfaceStat;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.SigarNotImplementedException;
public class LoadInfoImpl implements LoadInfo {
/**
* 创建sigar对象用来获取系统信息
*/
private Sigar sigar = new Sigar();;
private CpuPerc cpuCerc;
private Properties props = System.getProperties();
private Mem mem;
public String getCpuInfo() {
try {
/**
* 获取cpu信息
*/
cpuCerc = sigar.getCpuPerc();
/**
* 保留两位小数
*/
DecimalFormat df = new DecimalFormat("#.00");
/**
* 如果cpu使用率为零时,不保留小数位
*/
if (cpuCerc.getCombined() == 0) {
return 0 + "%";
} else {
return df.format(cpuCerc.getCombined() * 100) + "%";
}
} catch (SigarException e) {
e.printStackTrace();
}
return String.valueOf(cpuCerc.getCombined());
}
public String getRamInfo() {
try {
/**
* 获取系统内存信息
*/
mem = sigar.getMem();
} catch (SigarException e) {
e.printStackTrace();
}
/**
* 返回系统内存使用量
*/
return mem.getUsed() / 1024 / 1024 + "M";
}
public String getNetworkInfo() {
String ifNames[]=null;
String txbyte=null;
try {
ifNames = sigar.getNetInterfaceList();
} catch (SigarException e2) {
e2.printStackTrace();
}
String name = ifNames[0];
try {
/**
* 获取网络流量
*/
NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);
/**
* 获取发送的总字节数
*/
txbyte=ifstat.getTxBytes()+"byte";
} catch (SigarNotImplementedException e) {
} catch (SigarException e) {
System.out.println(e.getMessage());
}
return txbyte;
}
public String getSystemInfo() {
/**
* 获取操作系统名称
*/
return props.getProperty("os.name");
}
public String getRunLoadInfo() {
/**
* 获取运行环境信息
*/
String runload=props.getProperty("java.vm.name");
return runload;
}
public String getVmRamInfo() {
/**
* 获取虚拟机剩余内存
*/
return Runtime.getRuntime().freeMemory() / (1024 * 1024) + "M";
}
}
其他帖子介绍:
Hyperic-Sigar是一个收集系统各项底层信息的工具集.他有如下特点:
1. 收集信息全面
收集CPU,MEM,NETWORK,PROCESS,IOSTAT等
使用Sigar,你完全可以模仿出cpuinfo,meminfo,top,free,ifconfig,ipconfig,netstat,route,df,du,ps,ls等多种unix平台和windows平台的指令.
2.跨平台,支持多数平台
支持的平台包括:windows系列(32系列,IA64系列,AMD64系列),linux系列,freeBsd系列,HPUnix系列,Sun solaris/Sparc/Sparc64系列,macOs系列,AIX系列等
3.提供的API接口全面
sigar本身由C语言开发而成,提供了丰富的API接口,包括:JAVA,.NET,PERL,PHP,PYTHON,RUBY.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下载地址:http://sigar.hyperic.com
通过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>