Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件。它用来从许多平台收集系统和处理信息.

这些平台包括:Linux, Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX.

Sigar有C,C#,Java和Perl API,java版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。

注意:Sigar为不同平台提供了不同的库文件.典型的:
windows平台:sigar-x86-winnt.dll
linux平台:libsigar-x86-linux.so或
solaris平台: libsigar-x86-solaris.so或libsigar-sparc-solaris.so或libsigar-sparc64-solaris.so
64位平台:分为至强的libsigar-ia64-linux.so和AMD的libsigar-amd64-linux.so,sigar-amd64-winnt.dll

Hyperic-hq官方网站:http://www.hyperic.com

Sigar.jar下载地址:http://sigar.hyperic.com

备用下载地址:点击下载

Sigar API 提供一个方便的接口来收集系统信息,如:

◆系统内存,页面交换,cpu,平均负载,运行时间,登录信息

◆每个进程占用的内存,cpu,帐号信息,状态,参数,环境,打开的文件

◆文件系统探测和度量

◆网络接口探测,配置信息和度量

◆网络路由和连接表

获取cpu信息代码

// CPU数量(单位:个)
int cpuLength = sigar.getCpuInfoList().length;
print(cpuLength); // CPU的总量(单位:HZ)及CPU的相关信息
CpuInfo infos[] = sigar.getCpuInfoList();
for (int i = 0; i < infos.length; i++) {// 不管是单块CPU还是多CPU都适用
CpuInfo info = infos[i];
print("mhz=" + info.getMhz());// CPU的总量MHz
print("vendor=" + info.getVendor());// 获得CPU的卖主,如:Intel
print("model=" + info.getModel());// 获得CPU的类别,如:Celeron
print("cache size=" + info.getCacheSize());// 缓冲存储器数量
} /** CPU的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等(单位:100%) **/
// 方式一,主要是针对一块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();
}
for (int i = 0; i < cpuList.length; i++) {
// printCpuPerc(cpuList[i]);
}

获取内存信息代码

// 物理内存信息
Mem mem = sigar.getMem();
// 内存总量
print("Total = " + mem.getTotal() / 1024L / 1024 + "M av");
// 当前内存使用量
print("Used = " + mem.getUsed() / 1024L / 1024 + "M used");
// 当前内存剩余量
print("Free = " + mem.getFree() / 1024L / 1024 + "M free"); // 系统页面文件交换区信息
Swap swap = sigar.getSwap();
// 交换区总量
print("Total = " + swap.getTotal() / 1024L + "K av");
// 当前交换区使用量
print("Used = " + swap.getUsed() / 1024L + "K used");
// 当前交换区剩余量
print("Free = " + swap.getFree() / 1024L + "K free");

获取操作系统信息代码

// 取到当前操作系统的名称
String hostname = "";
try {
hostname = InetAddress.getLocalHost().getHostName();
} catch (Exception exc) {
try {
hostname = sigar.getNetInfo().getHostName();
} catch (SigarException e) {
hostname = "localhost.unknown";
} finally {
sigar.close();
}
}
print(hostname); // 取当前操作系统的信息
OperatingSystem OS = OperatingSystem.getInstance();
// 操作系统内核类型如: 386、486、586等x86
print("OS.getArch() = " + OS.getArch());
print("OS.getCpuEndian() = " + OS.getCpuEndian());//
print("OS.getDataModel() = " + OS.getDataModel());//
// 系统描述
print("OS.getDescription() = " + OS.getDescription());
print("OS.getMachine() = " + OS.getMachine());//
// 操作系统类型
print("OS.getName() = " + OS.getName());
print("OS.getPatchLevel() = " + OS.getPatchLevel());//
// 操作系统的卖主
print("OS.getVendor() = " + OS.getVendor());
// 卖主名称
System.out
.println("OS.getVendorCodeName() = " + OS.getVendorCodeName());
// 操作系统名称
print("OS.getVendorName() = " + OS.getVendorName());
// 操作系统卖主类型
print("OS.getVendorVersion() = " + OS.getVendorVersion());
// 操作系统的版本号
print("OS.getVersion() = " + OS.getVersion()); // 取当前系统进程表中的用户信息
Who who[] = sigar.getWhoList();
if (who != null && who.length > 0) {
for (int i = 0; i < who.length; i++) {
print("\n~~~~~~~~~" + String.valueOf(i) + "~~~~~~~~~");
Who _who = who[i];
print("getDevice() = " + _who.getDevice());
print("getHost() = " + _who.getHost());
print("getTime() = " + _who.getTime());
// 当前系统进程表中的用户名
print("getUser() = " + _who.getUser());
}
}

获取磁盘信息代码

//取硬盘已有的分区及其详细信息(通过sigar.getFileSystemList()来获得FileSystem列表对象,然后对其进行编历
FileSystem fslist[] = sigar.getFileSystemList();
String dir = System.getProperty("user.home");// 当前用户文件夹路径
print(dir + " " + fslist.length);
for (int i = 0; i < fslist.length; i++) {
print("\n~~~~~~~~~~" + i + "~~~~~~~~~~");
FileSystem fs = fslist[i];
// 分区的盘符名称
print("fs.getDevName() = " + fs.getDevName());
// 分区的盘符名称
print("fs.getDirName() = " + fs.getDirName());
print("fs.getFlags() = " + fs.getFlags());//
// 文件系统类型,比如 FAT32、NTFS
print("fs.getSysTypeName() = " + fs.getSysTypeName());
// 文件系统类型名,比如本地硬盘、光驱、网络文件系统等
print("fs.getTypeName() = " + fs.getTypeName());
// 文件系统类型
print("fs.getType() = " + fs.getType());
FileSystemUsage usage = null;
try {
usage = sigar.getFileSystemUsage(fs.getDirName());
} catch (SigarException e) {
if (fs.getType() == 2)
throw e;
continue;
}
switch (fs.getType()) {
case 0: // TYPE_UNKNOWN :未知
break;
case 1: // TYPE_NONE
break;
case 2: // TYPE_LOCAL_DISK : 本地硬盘
// 文件系统总大小
print(" Total = " + usage.getTotal() + "KB");
// 文件系统剩余大小
print(" Free = " + usage.getFree() + "KB");
// 文件系统可用大小
print(" Avail = " + usage.getAvail() + "KB");
// 文件系统已经使用量
print(" Used = " + usage.getUsed() + "KB");
double usePercent = usage.getUsePercent() * 100D;
// 文件系统资源的利用率
print(" Usage = " + usePercent + "%");
break;
case 3:// TYPE_NETWORK :网络
break;
case 4:// TYPE_RAM_DISK :闪存
break;
case 5:// TYPE_CDROM :光驱
break;
case 6:// TYPE_SWAP :页面交换
break;
}
print(" DiskReads = " + usage.getDiskReads());
print(" DiskWrites = " + usage.getDiskWrites());
}

获取网络信息代码

//当前机器的正式域名
try {
print(InetAddress.getLocalHost().getCanonicalHostName());
} catch (UnknownHostException e) {
try {
print(sigar.getFQDN());
} catch (SigarException ex) {
} finally {
sigar.close();
}
} // 取到当前机器的IP地址
String address = null;
try {
address = InetAddress.getLocalHost().getHostAddress();
// 没有出现异常而正常当取到的IP时,如果取到的不是网卡循回地址时就返回
// 否则再通过Sigar工具包中的方法来获取
print(address);
if (!NetFlags.LOOPBACK_ADDRESS.equals(address)) {
}
} catch (UnknownHostException e) {
// hostname not in DNS or /etc/hosts
}
try {
address = sigar.getNetInterfaceConfig().getAddress();
} catch (SigarException e) {
address = NetFlags.LOOPBACK_ADDRESS;
} finally {
}
print(address); // 取到当前机器的MAC地址
String[] ifaces = sigar.getNetInterfaceList();
String hwaddr = null;
for (int i = 0; i < ifaces.length; i++) {
NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]);
if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress())
|| (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
|| NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) {
continue;
}
hwaddr = cfg.getHwaddr();
print(hwaddr);
// break;
}
print(hwaddr != null ? hwaddr : null); // 获取网络流量等信息
String ifNames[] = sigar.getNetInterfaceList();
for (int i = 0; i < ifNames.length; i++) {
String name = ifNames[i];
NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);
print("\nname = " + name);// 网络设备名
print("Address = " + ifconfig.getAddress());// IP地址
print("Netmask = " + ifconfig.getNetmask());// 子网掩码
if ((ifconfig.getFlags() & 1L) <= 0L) {
print("!IFF_UP...skipping getNetInterfaceStat");
continue;
}
try {
NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);
print("RxPackets = " + ifstat.getRxPackets());// 接收的总包裹数
print("TxPackets = " + ifstat.getTxPackets());// 发送的总包裹数
print("RxBytes = " + ifstat.getRxBytes());// 接收到的总字节数
print("TxBytes = " + ifstat.getTxBytes());// 发送的总字节数
print("RxErrors = " + ifstat.getRxErrors());// 接收到的错误包数
print("TxErrors = " + ifstat.getTxErrors());// 发送数据包时的错误数
print("RxDropped = " + ifstat.getRxDropped());// 接收时丢弃的包数
print("TxDropped = " + ifstat.getTxDropped());// 发送时丢弃的包数
} catch (SigarNotImplementedException e) {
} catch (SigarException e) {
print(e.getMessage());
}
} // 一些其他的信息
for (int i = 0; i < ifaces.length; i++) {
NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]);
if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress())
|| (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
|| NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) {
continue;
}
print("cfg.getAddress() = " + cfg.getAddress());// IP地址
print("cfg.getBroadcast() = " + cfg.getBroadcast());// 网关广播地址
print("cfg.getHwaddr() = " + cfg.getHwaddr());// 网卡MAC地址
print("cfg.getNetmask() = " + cfg.getNetmask());// 子网掩码
System.out
.println("cfg.getDescription() = " + cfg.getDescription());// 网卡描述信息
print("cfg.getType() = " + cfg.getType());//
System.out
.println("cfg.getDestination() = " + cfg.getDestination());
print("cfg.getFlags() = " + cfg.getFlags());//
print("cfg.getMetric() = " + cfg.getMetric());
print("cfg.getMtu() = " + cfg.getMtu());
print("cfg.getName() = " + cfg.getName());
}

  

Sigar介绍与使用的更多相关文章

  1. Sigar使用

    Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的.项目中使用Sigar进行服务器 ...

  2. ava如何实现系统监控、系统信息收集、sigar开源API的学习(转)

    ava如何实现系统监控.系统信息收集.sigar开源API的学习(转) 转自:http://liningjustsoso.iteye.com/blog/1254584 首先给大家介绍一个开源工具Sig ...

  3. java使用sigar 遇到问题的解决方案

    先给大家介绍一个开源工具Sigar 官网:http://sigar.hyperic.com/ API:http://www.hyperic.com/support/docs/sigar/index-a ...

  4. Sigar简介

    大家好,我是Sigar.也许好多人还不认识我.下面就介绍一下我自己,好让大家对我有一个大致的了解. 我的全名是System Information Gatherer And Reporter,中文名是 ...

  5. Netty——基本使用介绍

    https://blog.csdn.net/haoyuyang/article/details/53243785 1.为什么选择Netty 上一篇文章我们已经了解了Socket通信(IO/NIO/AI ...

  6. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  7. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  8. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  9. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

随机推荐

  1. tomcat浏览器地址支持中文方法

  2. 【leetcode】Reverse Integer(middle)☆

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 总结:处理整数溢出 ...

  3. .net在当前日期的基础上加一天

    比如今天是:2015-11-10 18:57:01,在这个基础上加一天,那么就是2015-11-11 18:57:01,代码如下: DateTime now_dt = DateTime.Now; ). ...

  4. asp.net 短信群发

    protected void Btn_Save_Click(object sender, EventArgs e) { string Contents = this.Txt_SmsContents.T ...

  5. Scanner和BufferedReader

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  6. Oracle读写分离架构

    读写分离是架构分布式系统的一个重要思想.不少系统整体处理能力并不能同业务的增长保持同步,因此势必会带来瓶颈,单纯的升级硬件并不能一劳永逸.针对业务类型特点,需要从架构模式上进行一系列的调整,比如业务模 ...

  7. 使用DateUtils和DateFormatUtils处理时间日期转换与SimpleDateFormat的区别

    在Apache Commons项目的Lang里面,有两个类:DateUtils和DateFormatUtils,专门用于处理时间日期转换.它们在 org.apache.commons.lang.tim ...

  8. Java之POJO

    转: POJO    一:什么是POJOPOJO的名称有多种,pure old java object .plain ordinary java object 等.按照Martin Fowler的解释 ...

  9. Android Tab -- 使用Fragment、FragmentManager来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果: 代码:https://github.com/ldb-github/La ...

  10. tar 只解压tar包中某个文件

    sh-4.1# ls test.tar sh-4.1# tar -tf test.tar ./ecs20161207.png ./ecs.png ./ecs.xml ./rds.png ./Scree ...