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中的使用:

示例代码:

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代码

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代码

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代码

Xml代码 收藏代码
  1. 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. } 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值