一、 Sigar详细介绍
Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的。
Sigar资料地址:https://support.hyperic.com/display/SIGAR/Home
Sigar提供了一组轻便式接口来收集系统信息,主要信息包含:
● 系统内存,页面交换,cpu,平均负载,运行时间,登录信息;
● 每个进程占用的内存,cpu,帐号信息,状态,参数,环境,打开的文件;
● 文件系统监测和度量;
● 网络接口监测,配置信息和度量;
● TCP和UDP连接表;
● 网络路由表;
Sigar适用的平台:
Sigar发布包含的文件如下:
二、Sigar实例详解
1. 环境准备
1) 需要架包:sigar-1.6.4.jar
2)C:\Windows\System32中加入sigar-amd64-winnt.dll
2. 实例实现
1) SigarInfoEntity.java (sigar显示信息实体)
package com.lm;
/**
* 数据显示实体
* @author ThinkPad
*
*/
public class SigarInfoEntity {
private String value;
private String name;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SigarInfoEntity(String value, String name) {
super();
this.value = value;
this.name = name;
}
public SigarInfoEntity(){
}
}
2) SIgarUtils.java (sigar获取信息工具类)
package com.lm;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.NetInterfaceStat;
import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.Swap;
/**
* sigar工具类
*
* @author ThinkPad
*
*/
public class SigarUtils {
private static Sigar sigar;
/**
* 获取sigar实体
*
* @return
*/
public static Sigar getInstance() {
if (null == sigar) {
sigar = new Sigar();
}
return sigar;
}
/**
* 1.获取系统信息和jvm虚拟机信息
*
* @return
* @throws UnknownHostException
*/
public static List<SigarInfoEntity> getJvmInfos()
throws UnknownHostException {
List<SigarInfoEntity> jvmInfoList = new ArrayList<SigarInfoEntity>();
Runtime r = Runtime.getRuntime();
// 系统配置属性
Properties sysProps = System.getProperties();
// java对ip封装的对象
InetAddress addr;
addr = InetAddress.getLocalHost();
Map<String, String> envInfoMap = System.getenv();
String userName = envInfoMap.get("USERNAME");// 获取用户名
String computerName = envInfoMap.get("COMPUTERNAME");// 获取计算机名
String userDomain = envInfoMap.get("USERDOMAIN");// 获取计算机域名
jvmInfoList.add(new SigarInfoEntity(userName, "获取用户名"));
jvmInfoList.add(new SigarInfoEntity(computerName, "获取计算机名"));
jvmInfoList.add(new SigarInfoEntity(userDomain, "获取计算机域名"));
jvmInfoList.add(new SigarInfoEntity(addr.getHostAddress(), "获取Ip"));
jvmInfoList.add(new SigarInfoEntity(addr.getHostName(), "获取主机名称"));
jvmInfoList.add(new SigarInfoEntity(String.valueOf(r.totalMemory()),
"JVM总内存"));
jvmInfoList.add(new SigarInfoEntity(String.valueOf(r.freeMemory()),
"JVM剩余内存"));
jvmInfoList.add(new SigarInfoEntity(String.valueOf(r
.availableProcessors()), "jvm处理器个数"));
jvmInfoList.add(new SigarInfoEntity(sysProps
.getProperty("java.version"), "Java的运行环境版本"));
jvmInfoList.add(new SigarInfoEntity(
sysProps.getProperty("java.vendor"), "Java的运行环境供应商"));
jvmInfoList.add(new SigarInfoEntity(sysProps
.getPr