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("\n~~~~~~~~~" +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("\n~~~~~~~~~~"+ 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("\nname = " +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();

          }

}

Hyperic-Sigar简介相关推荐

  1. Hyperic HQ简介

    Hyperic HQ 第一章 概述 一.简介 Hyperic HQ是一个基于Java的软件资源监测和管理平台.体系结构的关键要素是HQ Server,可用于集中管理和持久性存储,以及HQ Agent, ...

  2. 利用sigar监控服务器状态

    文章目录 效果 前言 利用sigar实现服务器监控 sigar简介 sigar下载 sigar为不同平台提供的不同库文件 Java代码使用示例 引擎系统增加http接口 搜索平台获取服务器信息 效果 ...

  3. java使用sigar监控服务器

    1.引入sigar的jar包 import java.net.InetAddress; import java.net.UnknownHostException; import java.util.M ...

  4. 跨平台 获取系统信息的python库 http://support.hyperic.com/disp

    跨平台 获取系统信息的python库 http://support.hyperic.com/disp - 张沈鹏,在路上... - ITeye技术网站 跨平台 获取系统信息的python库 http: ...

  5. 利用Sigar获取系统信息

    地址 Hyperic-hq官方网站:http://www.hyperic.com Sigar.jar下载地址:http://sourceforge.net/projects/sigar/files/ ...

  6. Sigar - no sigar-amd64-winnt.dll in java.library.path

    错误信息 0 [taskScheduler-2] DEBUG Sigar - no sigar-amd64-winnt.dll in java.library.path org.hyperic.sig ...

  7. Sigar 获取CPU和Memory内存等信息使用详解

    一.  Sigar详细介绍 Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的. ...

  8. Java-SpringBoot-使用Sigar采集设备信息

    文章目录 Java-SpringBoot-使用Sigar采集设备信息 一.Sigar依赖 二.项目讲解 1. 项目结构图 2. 数据传递实体类 3. Sigar采集类 4. Controller控制类 ...

  9. 使用Sigar在不同操作系统遇到的坑

    最近由于工作需要,需要监控服务器的内存和cpu的使用情况,使用Sigar来获取服务器的基础数据,下面是依赖的sigar包 <!-- https://mvnrepository.com/artif ...

  10. Sigar获取网卡流量信息

    在网络应用中,经常要对网卡的流量进行统计分析. 和网卡相关的统计数据主要有:网卡信息(ip地址.子网掩码.mac地址等).网卡的吞吐量.流量等等. 当然了使用sigar也可以获得这些数据. 下面通过例 ...

最新文章

  1. 解决远程登录MYSQL数据库
  2. thymeleaf th:if else
  3. python-模块安装方法
  4. 什么是抽象类?抽象类的作用_揭秘!Java 泛型背后到底是什么?
  5. java技术难点_Java核心技术第四章----对象与类重难点总结
  6. new 操作符干了什么?
  7. 阿里开源首个移动AI项目,淘宝同款推理引擎
  8. js的一些兼容性写法
  9. 深度学习入门(六)——计算机视觉简述
  10. 7.3 超标量流水线
  11. 计算机为啥系统保护设置不了,Win7系统下不能设置电脑屏幕保护程序的时间怎么办...
  12. 图片怎么批量转换格式?
  13. ERROR in ./src/vue/login.vue?vuetype=templateid=28b333d2 2:0 Module parse failed: Unexpected toke
  14. python自动翻译excel某一列_python批量将excel内容进行翻译写入功能
  15. shell-grammar
  16. unity 转向和角度
  17. UniPro助力半导体企业之低代码平台篇:高效协同快速响应
  18. 海量数据相关面试问题(二):海量数据热点数据/出现频度/TOP-K问题(TOP-K 分而治之/Hash映射 / Hashmap统计频度 / 堆排序决出排名)
  19. dropout法中为什么要除以keep_prob?
  20. 流体力学(量纲分析和流动相似原理)

热门文章

  1. 钢铁表面缺陷检测图像数据集(1800张图像,voc标签)
  2. win7重装的坑:启动分区不存在 使用分区工具修正
  3. 计算机初级培训教学大纲,计算机初级培训教学大纲.doc
  4. 二年级数学计算机教学教案,人教版二年级下册数学全册教案
  5. 前端进阶之javaScript
  6. MSCKF 2.0 理论推导以及能观性分析
  7. 图像配准常用评价方法
  8. inc si指令的作用_8086指令
  9. 机器学习小组知识点14:均匀分布(Uniform Distribution)
  10. 工业和信息化部关于开展纵深推进APP侵害用户权益专项整治行动的通知(工信部信管函〔2020〕164号)