`

Sigar简介

    博客分类:
  • Java
 
阅读更多

Sigar简介

Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,由C语言实现的。可以收集的信息包括:

1, CPU信息,包括基本信息(vendor、model、mhz、cacheSize)和统计信息(user、sys、idle、nice、wait)

2, 文件系统信息,包括Filesystem、Size、Used、Avail、Use%、Type

3, 事件信息,类似Service Control Manager

4, 内存信息,物理内存和交换内存的总数、使用数、剩余数;RAM的大小

5, 网络信息,包括网络接口信息和网络路由信息

6, 进程信息,包括每个进程的内存、CPU占用数、状态、参数、句柄

7, IO信息,包括IO的状态,读写大小等

8, 服务状态信息

9, 系统信息,包括操作系统版本,系统资源限制情况,系统运行时间以及负载,JAVA的版本信息等.

Sigar在Java中的使用:

示例代码:

package cn.jsi.buaa;

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 SigarTest {

private CpuInfo info;

private CpuPerc perc;

private Cpu timer;

public SigarTest() {

}

public void populate(Sigar sigar) throws SigarException {

info = sigar.getCpuInfoList()[0];

perc = sigar.getCpuPerc();

timer = sigar.getCpu();

}

public static SigarTest gather(Sigar sigar) throws SigarException {

SigarTest data = new SigarTest();

data.populate(sigar);

return data;

}

public static void main(String[] args) throws Exception {

System.out.println(System.getProperty("java.library.path"));

Sigar sigar = new Sigar();

SigarTest cpuData = SigarTest.gather(sigar);

XStream xstream = new XStream();

xstream.alias("CpuData", SigarTest.class);

System.out.println(xstream.toXML(cpuData));

}

}

Windows:将sigar.jar包放到classpath下,将sigar-amd64-winnt.dll放到环境变量java.library.path下。
Linux:将sigar.jar包放到classpath下,将libsigar-x86-linux.so放到环境变量java.library.path下。


获取网卡的流量

和网卡相关的统计数据主要有:网卡信息(ip地址、子网掩码、mac地址等)、网卡的吞吐量、流量等等。 

当然了使用sigar也可以获得这些数据。 

下面通过例子说明: 

Java代码

1. package lab.sigar;   
2.   
3. import java.util.ArrayList;   
4. import java.util.List;   
5.   
6. import org.hyperic.sigar.NetInterfaceConfig;   
7. import org.hyperic.sigar.NetInterfaceStat;   
8. import org.hyperic.sigar.Sigar;   
9. import org.hyperic.sigar.SigarException;   
10.   
11. import com.thoughtworks.xstream.XStream;   
12.   
13. /**
14. * 网卡信息、接口数据、流量
15. *
16. * 使用Sigar获得网卡信息
17. *
18. */  
19. public class NetInterfaceData {   
20.   
21.     private NetInterfaceConfig config;   
22.     private NetInterfaceStat stat;   
23.     private long rxbps;   
24.     private long txbps;   
25.   
26.     public NetInterfaceData() {}   
27.   
28.     public void populate(Sigar sigar, String name)   
29.         throws SigarException {   
30.   
31.          config = sigar.getNetInterfaceConfig(name);   
32.   
33.         try {   
34.                
35.             long start = System.currentTimeMillis();   
36.              NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);   
37.             long rxBytesStart = statStart.getRxBytes();   
38.             long txBytesStart = statStart.getTxBytes();   
39.              Thread.sleep(1000);   
40.             long end = System.currentTimeMillis();   
41.              NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);   
42.             long rxBytesEnd = statEnd.getRxBytes();   
43.             long txBytesEnd = statEnd.getTxBytes();   
44.                
45.              rxbps = (rxBytesEnd - rxBytesStart)*8/(end-start)*1000;   
46.              txbps = (txBytesEnd - txBytesStart)*8/(end-start)*1000;   
47.              stat = sigar.getNetInterfaceStat(name);   
48.          } catch (SigarException e) {   
49.                
50.          } catch (Exception e) {   
51.                
52.          }   
53.      }   
54.   
55.     public static NetInterfaceData gather(Sigar sigar, String name)   
56.         throws SigarException {   
57.        
58.          NetInterfaceData data = new NetInterfaceData();   
59.          data.populate(sigar, name);   
60.         return data;   
61.      }   
62.   
63.     public NetInterfaceConfig getConfig() {   
64.         return config;   
65.      }   
66.   
67.     public NetInterfaceStat getStat() {   
68.         return stat;   
69.      }   
70.        
71.        
72.        
73.     public long getRxbps() {   
74.         return rxbps;   
75.      }   
76.   
77.     public long getTxbps() {   
78.         return txbps;   
79.      }   
80.   
81.     public static void main(String[] args) throws Exception {   
82.          Sigar sigar = new Sigar();   
83.          String[] netIfs = sigar.getNetInterfaceList();   
84.          List netIfList = new ArrayList();   
85.         for ( String name:netIfs ) {   
86.              NetInterfaceData netIfData1 = NetInterfaceData.gather(sigar, name);   
87.              netIfList.add(netIfData1);   
88.          }   
89.          XStream xstream = new XStream();   
90.          xstream.alias("NetInterfaceDatas", List.class);   
91.          xstream.alias("NetInterfaceData", NetInterfaceData.class);   
92.          System.out.println(xstream.toXML(netIfList));   
93.      }   
94. } 

获取内存数据

内存的主要指标有:物理内存的大小、使用数、剩余数;交换内存的大小、使用数、剩余数;RAM的大小等等。 

下面通过例子说明: 

Java代码

1. package lab.sigar;   
2.   
3. import org.hyperic.sigar.Mem;   
4. import org.hyperic.sigar.Sigar;   
5. import org.hyperic.sigar.SigarException;   
6. import org.hyperic.sigar.Swap;   
7.   
8. import com.thoughtworks.xstream.XStream;   
9.   
10. /**
11. * 内存数据
12. *
13. * 使用Sigar获得系统内存信息
14. *
15. */  
16. public class MemoryData {   
17.     private Mem mem;   
18.     private Swap swap;   
19.   
20.     public MemoryData() {   
21.      }   
22.   
23.     public void populate(Sigar sigar) throws SigarException {   
24.          mem = sigar.getMem();   
25.          swap = sigar.getSwap();   
26.      }   
27.   
28.     public static MemoryData gather(Sigar sigar) throws SigarException {   
29.          MemoryData data = new MemoryData();   
30.          data.populate(sigar);   
31.         return data;   
32.      }   
33.        
34.     public static void main(String[] args) throws Exception {   
35.          Sigar sigar = new Sigar();   
36.          MemoryData memData = MemoryData.gather(sigar);   
37.          XStream xstream = new XStream();   
38.          xstream.alias("MemData", MemoryData.class);   
39.          System.out.println(xstream.toXML(memData));   
40.      }   
41.   
42. }

输出: 
Xml代码

1. <MemData>  
2.   <mem>  
3.     <total>1073102848</total>  
4.     <ram>1024</ram>  
5.     <used>932274176</used>  
6.     <free>140828672</free>  
7.     <actualUsed>932274176</actualUsed>  
8.     <actualFree>140828672</actualFree>  
9.   </mem>  
10.   <swap>  
11.     <total>2580328448</total>  
12.     <used>870432768</used>  
13.     <free>1709895680</free>  
14.     <pageIn>137691</pageIn>  
15.     <pageOut>19392</pageOut>  
16.   </swap>  
17. </MemData>
分享到:
评论

相关推荐

    SugarCRM项目常见面试问题

    #### 一、SugarCRM项目简介 SugarCRM是一个由美国SugarCRM公司开发的开源客户关系管理系统(Customer Relationship Management, CRM),它采用了B/S(Browser/Server)架构,具备高度可定制性和扩展性。SugarCRM的...

    Sugar_Community_Edition_Application_Guide_6.3.0GA.pdf

    #### 一、SugarCRM简介 - **产品定位**:SugarCRM是一款商业开源客户关系管理(CRM)应用程序,旨在帮助企业高效组织、填充和维护与其客户关系相关的所有方面信息。 - **功能特点**: - 集成管理企业关于客户账户...

    CRM Implementing SugarCRM

    #### 二、SugarCRM简介 SugarCRM是一款开源的客户关系管理系统,以其灵活性和可定制性而闻名。它为企业提供了一个功能强大的平台,用于管理销售机会、市场营销活动以及客户服务等业务流程。SugarCRM不仅支持传统的...

    google校招求职攻略

    google校招求职攻略2013 公司简介 职位详情 应聘技巧 求职经验

    简介JavaScript中的unshift()方法的使用

    var arr = new Array("orange", "mango", "banana", "sugar"); ``` 现在,如果我们要在数组的开头添加一个新元素"water",可以使用unshift()方法: ```javascript var length = arr.unshift("water"); ``` 上述...

    Elastix_User_Manual_Chinese_0.9.pdf

    简介 Elastix是一款基于Asterisk的开源电话系统,它集成了最优秀的工具,为用户提供了一个简单、易操作的界面。此外,Elastix还加入了自有的特性,允许外部创新,使其成为开源通信领域中最全面的软件包之一。...

    2024年欧洲环糊精市场主要企业市场占有率及排名.docx

    #### 七、重点企业简介 - **Wacker**:全球领先的环糊精生产商之一。 - **Ensuiko Sugar Refining**:专注于食品级环糊精的生产和研发。 - **Nihon Shokuhin Kako**:日本知名的食品添加剂供应商。 - **Roquette**...

    空灵风PPT模板-28.pptx

    此外,模板中还包含了甜点类食品的词汇(如Biscuit oat cake carrot cake muffin jelly beans chocolate chocolate sugar plum cheesecake),这可能是一个示例列表或分类,用户可以根据实际需要替换为项目相关的...

    Mac和iOS库用于解析结构化文本-Swift开发

    用法安装解析字符集转换常见转换键入标签正向引用语法Sugar White Space Err简介什么? 为什么? 如何? 用法安装解析字符集转换通用转换类型化标签正向引用语法糖空格错误处理性能回溯字符序列拼合并丢弃示例项目...

    android中sqlite

    1. SQLite简介: SQLite是一个开源、嵌入式的关系数据库,它不需要单独的服务器进程,而是直接集成在应用程序中。它的体积小、速度快、可靠性高,特别适合资源有限的移动设备。在Android平台上,SQLite是默认的数据...

    WAMPStack document

    - **BitNami项目简介**:BitNami项目旨在推广高质量、免费可用的开源Web应用。通过提供易于发现、下载和安装的服务,使得用户能够轻松地部署如文档管理系统、内容管理系统、Wiki以及博客软件等开源软件。 - **...

    elastix_中文版用户手册

    #### 第一章 简介 - **Elastix系统概述**:Elastix是一个基于开源技术构建的综合通信平台,旨在为用户提供一个直观、易于管理和高度可定制化的解决方案。该平台不仅整合了Asterisk PBX的强大功能,还提供了一个友好...

    hibernate123

    ### Hibernate框架简介 Hibernate是一个开源的对象关系映射(ORM)框架,用于Java环境下的数据库操作。它能够将面向对象的编程模型与关系型数据库的数据结构之间进行桥梁式转换,使得开发者可以直接用面向对象的...

    HowtoUseTwitterforSocialSelling

    本文将基于"SugarCRM"官网下载资料中的内容,深入探讨如何有效利用Twitter进行社交销售,以及其背后的策略与技巧。 #### Twitter在销售中的作用 Twitter作为全球知名的社交平台,不仅提供了即时通讯的便利性,更是...

    Pragmatic Guide to Git

    #### 一、Git简介与重要性 - **Git定义**:Git是一款分布式版本控制系统,最初由Linus Torvalds在2005年开发,用于Linux内核的开发。 - **特点**: - 分布式特性:每个开发者的工作副本都是一个完整的仓库,包含...

    Android SugerORM 框架demo

    简介** SugarORM 是基于 ActiveAndroid 的一个分支,由 Thanh Nguyen 创建。它允许开发者以面向对象的方式处理数据库操作,提供了一种更简单、直观的方式来管理应用的数据模型。通过 SugarORM,你可以快速地将 Java...

    Aicc pens 开发指导

    - **地址**:P.O.Box 472, Sugar City, ID 83448-0472 - **文件格式**:PDF (CMI010_v1-0a.pdf) ### 版权声明与免责声明 - **版权所有**:AICC(2005,2006) - **免责声明**:本文档中的信息由AICC提供作为信息...

    Top 10 hosted CRM

    6. **SugarCRM**:开源CRM解决方案,允许企业根据自身需求进行高度定制。 7. **NetSuite CRM+**:为电子商务企业提供了一体化的CRM解决方案。 8. **Pipedrive**:专注于销售管理的CRM软件,特别适合销售团队使用。 9...

    SQLSugar ORM框架

    ### ORM框架简介 ORM全称为Object-Relational Mapping,即对象关系映射。在.NET开发中,ORM框架如Entity Framework、NHibernate和SQLSugar等,都扮演着桥梁的角色,它们将数据库的结构与应用程序中的对象模型进行...

Global site tag (gtag.js) - Google Analytics