zoukankan      html  css  js  c++  java
  • Hyperic-Sigar简介

    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.jar包的使用方法:

     

    1、             CPU资源信息

    a)        CPU数量(单位:个)

    privatestaticint getCpuCount()throws SigarException {

        Sigar sigar = new Sigar();

        try {

            returnsigar.getCpuInfoList().length;

        } finally {

            sigar.close();

        }

    }

    b)       CPU的总量(单位:HZ)及CPU的相关信息

    Sigar sigar = getSigar();

          CpuInfo infos[] = sigar.getCpuInfoList();

          for (int i = 0; i< infos.length; i++){//不管是单块CPU还是多CPU都适用

              CpuInfo info = infos[i];

              traceln("mhz=" +info.getMhz());//CPU的总量MHz

              traceln("vendor=" +info.getVendor());//获得CPU的卖主,如:Intel

              traceln("model=" +info.getModel());//获得CPU的类别,如:Celeron

              traceln("cache size=" +info.getCacheSize());//缓冲存储器数量

    }

    c)        CPU的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等(单位:100%)

    publicvoid testCpuPerc() {

              Sigar sigar= new Sigar();

             // 方式一,主要是针对一块CPU的情况

              CpuPerccpu;

             try {

                  cpu =sigar.getCpuPerc();

                 printCpuPerc(cpu);

              }catch (SigarException e) {

                 e.printStackTrace();

              }

             //方式二,不管是单块CPU还是多CPU都适用

              CpuPerccpuList[] = null;

             try {

                  cpuList =sigar.getCpuPercList();

              }catch (SigarException e) {

                 e.printStackTrace();

                 return;

              }

             for (int i = 0; i< cpuList.length; i++) {

                 printCpuPerc(cpuList[i]);

              }

           }

          privatevoid printCpuPerc(CpuPerc cpu) {

             println("User :" +CpuPerc.format(cpu.getUser()));//用户使用率

             println("Sys :" +CpuPerc.format(cpu.getSys()));// 系统使用率

             println("Wait :" +CpuPerc.format(cpu.getWait()));//当前等待率

             println("Nice :" +CpuPerc.format(cpu.getNice()));//

             println("Idle :" +CpuPerc.format(cpu.getIdle()));//当前空闲率

             println("Total :" +CpuPerc.format(cpu.getCombined()));//总的使用率

    }

    d)       ……

    2、             内存资源信息

    a)       物理内存信息

    Sigar sigar = new Sigar();

    Mem mem = sigar.getMem();

    // 内存总量

          System.out.println("Total = " +mem.getTotal() / 1024L + "K av");

          // 当前内存使用量

          System.out.println("Used = " +mem.getUsed() / 1024L + "K used");

          // 当前内存剩余量

    System.out.println("Free = "+ mem.getFree() / 1024L + "K free");

    b)       系统页面文件交换区信息

    Sigar sigar = new Sigar();

    Swap swap = sigar.getSwap();

    // 交换区总量

          System.out.println("Total = " +swap.getTotal() / 1024L + "K av");

          // 当前交换区使用量

          System.out.println("Used = " +swap.getUsed() / 1024L + "K used");

          // 当前交换区剩余量

    System.out.println("Free = "+ swap.getFree() / 1024L + "K free");

    c)     ……

    3、             操作系统信息

    a)     取到当前操作系统的名称:

     private StringgetPlatformName() {

              Stringhostname = "";

             try {

                  hostname =InetAddress.getLocalHost().getHostName();

              }catch (Exception exc) {

                  Sigarsigar = new Sigar();

                 try {

                     hostname= sigar.getNetInfo().getHostName();

                  }catch (SigarException e) {

                     hostname= "localhost.unknown";

                  }finally {

                    sigar.close();

                  }

              }

             return hostname;

    }

    b)       取当前操作系统的信息

          publicvoid testGetOSInfo() {

             OperatingSystemOS =OperatingSystem.getInstance();

             // 操作系统内核类型如:386、486、586等x86

             System.out.println("OS.getArch() =" + OS.getArch());

             System.out.println("OS.getCpuEndian() =" + OS.getCpuEndian());//

             System.out.println("OS.getDataModel() =" + OS.getDataModel());//

             // 系统描述

             System.out.println("OS.getDescription()= " + OS.getDescription());

             System.out.println("OS.getMachine() =" + OS.getMachine());//

             // 操作系统类型

             System.out.println("OS.getName() =" + OS.getName());

             System.out.println("OS.getPatchLevel()= " + OS.getPatchLevel());//

             // 操作系统的卖主

             System.out.println("OS.getVendor() =" + OS.getVendor());

             // 卖主名称

             System.out.println("OS.getVendorCodeName()= " + OS.getVendorCodeName());

             // 操作系统名称

             System.out.println("OS.getVendorName()= " + OS.getVendorName());

             // 操作系统卖主类型

             System.out.println("OS.getVendorVersion()= " + OS.getVendorVersion());

             // 操作系统的版本号

             System.out.println("OS.getVersion() =" + OS.getVersion());

    }

    c)        取当前系统进程表中的用户信息

    publicvoid testWho() {

             try {

                  Sigar sigar= new Sigar();

                  Who who[] =sigar.getWhoList();

                 if (who != null&& who.length> 0) {

                    for (int i = 0; i< who.length; i++) {

                        Sysout.out.println(" ~~~~~~~~~" +String.valueOf(i) + "~~~~~~~~~");

                         Who _who =who[i];

                        Sysout.out.println ("getDevice() = " +_who.getDevice());

                        Sysout.out.println ("getHost() = " +_who.getHost());

                        Sysout.out.println ("getTime() = " +_who.getTime());

                        //当前系统进程表中的用户名

                       Sysout.out.println ("getUser() = " +_who.getUser());

                     }

                  }

              }catch (SigarException e) {

                 e.printStackTrace();

              }

    }

    d)       ……

    4、             资源信息(主要是硬盘)

    a)     取硬盘已有的分区及其详细信息(通过sigar.getFileSystemList()来获得FileSystem列表对象,然后对其进行编历):

    publicvoid testFileSystemInfo()throws Exception {

              Sigar sigar= getSigar();

              FileSystemfslist[] = sigar.getFileSystemList();

              String dir =System.getProperty("user.home");//当前用户文件夹路径

             for (int i = 0; i< fslist.length; i++) {

                 System.out.println(" ~~~~~~~~~~"+ i + "~~~~~~~~~~");

                  FileSystemfs = fslist[i];

                 // 分区的盘符名称

                 System.out.println("fs.getDevName() =" + fs.getDevName());

                 // 分区的盘符名称

                 System.out.println("fs.getDirName() =" + fs.getDirName());

                 System.out.println("fs.getFlags() =" + fs.getFlags());//

                 // 文件系统类型,比如 FAT32、NTFS

                 System.out.println("fs.getSysTypeName()= " + fs.getSysTypeName());

                 // 文件系统类型名,比如本地硬盘、光驱、网络文件系统等

                 System.out.println("fs.getTypeName() =" + fs.getTypeName());

                 // 文件系统类型

                 System.out.println("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 :本地硬盘

                    // 文件系统总大小

                    System.out.println(" Total= " + usage.getTotal() + "KB");

                    // 文件系统剩余大小

                    System.out.println(" Free= " + usage.getFree() + "KB");

                    // 文件系统可用大小

                    System.out.println(" Avail= " + usage.getAvail() + "KB");

                    // 文件系统已经使用量

                    System.out.println(" Used= " + usage.getUsed() + "KB");

                    double usePercent = usage.getUsePercent() *100D;

                    // 文件系统资源的利用率

                    System.out.println(" Usage= " + usePercent + "%");

    break;

                 case 3:// TYPE_NETWORK:网络

                    break;

                 case 4:// TYPE_RAM_DISK:闪存

                    break;

                 case 5:// TYPE_CDROM :光驱

                    break;

                 case 6:// TYPE_SWAP :页面交换

                    break;

                  }

                 System.out.println(" DiskReads= " + usage.getDiskReads());

                 System.out.println(" DiskWrites= " + usage.getDiskWrites());

              }

             return;

    }

    b)     ……

    5、             网络信息

    a)     当前机器的正式域名

    public StringgetFQDN(){

             try {

                 returnInetAddress.getLocalHost().getCanonicalHostName();

              }catch (UnknownHostException e) {

                 try {

                     Sigar sigar= new Sigar();

                    return sigar.getFQDN();

                  }catch (SigarException ex) {

                    returnnull;

                  }finally {

                      sigar.close();

                  }

              }

    }

    b)       取到当前机器的IP地址

    public StringgetDefaultIpAddress() {

               String address = null;

               try {

                   address =InetAddress.getLocalHost().getHostAddress();

                   //没有出现异常而正常当取到的IP时,如果取到的不是网卡循回地址时就返回

                 // 否则再通过Sigar工具包中的方法来获取

    if(!NetFlags.LOOPBACK_ADDRESS.equals(address)){

                        return address;

                   }

               } catch (UnknownHostException e) {

                   //hostname not in DNS or /etc/hosts

               }

               Sigar sigar = new Sigar();

               try {

                   address = sigar.getNetInterfaceConfig().getAddress();

               } catch (SigarException e) {

                   address = NetFlags.LOOPBACK_ADDRESS;

               } finally {

                   sigar.close();

               }

    return address;

    }

    c)        取到当前机器的MAC地址

    public String getMAC() {

              Sigar sigar= null;

             try {

                  sigar =new Sigar();

                  String[]ifaces = sigar.getNetInterfaceList();

                  Stringhwaddr = 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();

                    break;

                  }

                 return hwaddr != null ?hwaddr : null;

              }catch (Exception e) {

                 returnnull;

              }finally {

                 if (sigar !=null)

                    sigar.close();

              }

    }

    d)       根据MAC地址来获得一个GUID号

    public String getGUID(String mac) {

             if (mac ==null)

                 returnnull;

             EthernetAddress eAddr = newEthernetAddress(mac);

             returnUUIDGenerator.getInstance().generateTimeBasedUUID(eAddr)

                    .toString();

    }

    e)        获取网络流量等信息

    publicvoid testNetIfList()throws Exception {

              Sigar sigar= new Sigar();

              StringifNames[] = sigar.getNetInterfaceList();

             for (int i = 0; i< ifNames.length; i++) {

                  String name= ifNames[i];

                 NetInterfaceConfig ifconfig =sigar.getNetInterfaceConfig(name);

                 print(" name = " +name);//网络设备名

                 print("Address = "+ifconfig.getAddress());//IP地址

                 print("Netmask = "+ifconfig.getNetmask());//子网掩码

                 if ( (ifconfig.getFlags()& 1L) <= 0L) {

                    print("!IFF_UP...skippinggetNetInterfaceStat");

                    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());

                  }

              }

    }

    void print(String msg){

             System.out.println(msg);

    }

    f)        一些其他的信息

          privatevoid getEthernetInfo(){

              Sigar sigar= null;

             try {

                  sigar =new Sigar();

                  String[]ifaces = sigar.getNetInterfaceList();

                 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;

                     }

                    System.out.println("cfg.getAddress() =" + cfg.getAddress());//IP地址

                    System.out.println("cfg.getBroadcast()= " + cfg.getBroadcast());//网关广播地址

                    System.out.println("cfg.getHwaddr() =" +cfg.getHwaddr());//网卡MAC地址

                    System.out.println("cfg.getNetmask() =" + cfg.getNetmask());//子网掩码

                    System.out.println("cfg.getDescription()= " + cfg.getDescription());//网卡描述信息

                    System.out.println("cfg.getType() =" + cfg.getType());//

                    System.out.println("cfg.getDestination()= " + cfg.getDestination());

                    System.out.println("cfg.getFlags() =" + cfg.getFlags());//

                    System.out.println("cfg.getMetric() =" + cfg.getMetric());

                    System.out.println("cfg.getMtu() =" + cfg.getMtu());

                    System.out.println("cfg.getName() =" + cfg.getName());

                    System.out.println();

                  }

              }catch (Exception e) {

                 System.out.println("Error whilecreating GUID" + e);

              }finally {

                 if (sigar !=null)

                    sigar.close();

              }

    }

  • 相关阅读:
    windows常用命令行总结
    express安装
    MySQL去除外键关联关系
    c#实体转化
    C#之Clone
    mysql 将null转代为0(转)
    Mysql显示行号
    mysql存储过程游标加计划任务事件调度器
    mysql临时表
    Git学习笔记
  • 原文地址:https://www.cnblogs.com/shijiaoyun/p/5169379.html
Copyright © 2011-2022 走看看