• 架构师养成记--23.sigar使用实例


     作用是检测机器的硬件环境

    注意在jdk的bin目录下加上sigar的lib目录中的文件

      1 import java.net.InetAddress;
      2 import java.net.UnknownHostException;
      3 import java.util.Map;
      4 import java.util.Properties;
      5 
      6 import org.hyperic.sigar.Cpu;
      7 import org.hyperic.sigar.CpuInfo;
      8 import org.hyperic.sigar.CpuPerc;
      9 import org.hyperic.sigar.FileSystem;
     10 import org.hyperic.sigar.FileSystemUsage;
     11 import org.hyperic.sigar.Mem;
     12 import org.hyperic.sigar.NetFlags;
     13 import org.hyperic.sigar.NetInterfaceConfig;
     14 import org.hyperic.sigar.NetInterfaceStat;
     15 import org.hyperic.sigar.OperatingSystem;
     16 import org.hyperic.sigar.Sigar;
     17 import org.hyperic.sigar.SigarException;
     18 import org.hyperic.sigar.Swap;
     19 import org.hyperic.sigar.Who;
     20 
     21 public class TestSigar {
     22     public static void main(String[] args) {
     23         try {
     24             // System信息,从jvm获取
     25             property();
     26             System.out.println("----------------------------------");
     27             // cpu信息
     28             cpu();
     29             System.out.println("----------------------------------");
     30             // 内存信息
     31             memory();
     32             System.out.println("----------------------------------");
     33             // 操作系统信息
     34             os();
     35             System.out.println("----------------------------------");
     36             // 用户信息
     37             who();
     38             System.out.println("----------------------------------");
     39             // 文件系统信息
     40             file();
     41             System.out.println("----------------------------------");
     42             // 网络信息
     43             net();
     44             System.out.println("----------------------------------");
     45             // 以太网信息
     46             ethernet();
     47             System.out.println("----------------------------------");
     48         } catch (Exception e1) {
     49             e1.printStackTrace();
     50         }
     51     }
     52 
     53     private static void property() throws UnknownHostException {
     54         Runtime r = Runtime.getRuntime();
     55         Properties props = System.getProperties();
     56         InetAddress addr;
     57         addr = InetAddress.getLocalHost();
     58         String ip = addr.getHostAddress();
     59         Map<String, String> map = System.getenv();
     60         String userName = map.get("USERNAME");// 获取用户名
     61         String computerName = map.get("COMPUTERNAME");// 获取计算机名
     62         String userDomain = map.get("USERDOMAIN");// 获取计算机域名
     63         System.out.println("用户名:    " + userName);
     64         System.out.println("计算机名:    " + computerName);
     65         System.out.println("计算机域名:    " + userDomain);
     66         System.out.println("本地ip地址:    " + ip);
     67         System.out.println("本地主机名:    " + addr.getHostName());
     68         System.out.println("JVM可以使用的总内存:    " + r.totalMemory());
     69         System.out.println("JVM可以使用的剩余内存:    " + r.freeMemory());
     70         System.out.println("JVM可以使用的处理器个数:    " + r.availableProcessors());
     71         System.out.println("Java的运行环境版本:    " + props.getProperty("java.version"));
     72         System.out.println("Java的运行环境供应商:    " + props.getProperty("java.vendor"));
     73         System.out.println("Java供应商的URL:    " + props.getProperty("java.vendor.url"));
     74         System.out.println("Java的安装路径:    " + props.getProperty("java.home"));
     75         System.out.println("Java的虚拟机规范版本:    " + props.getProperty("java.vm.specification.version"));
     76         System.out.println("Java的虚拟机规范供应商:    " + props.getProperty("java.vm.specification.vendor"));
     77         System.out.println("Java的虚拟机规范名称:    " + props.getProperty("java.vm.specification.name"));
     78         System.out.println("Java的虚拟机实现版本:    " + props.getProperty("java.vm.version"));
     79         System.out.println("Java的虚拟机实现供应商:    " + props.getProperty("java.vm.vendor"));
     80         System.out.println("Java的虚拟机实现名称:    " + props.getProperty("java.vm.name"));
     81         System.out.println("Java运行时环境规范版本:    " + props.getProperty("java.specification.version"));
     82         System.out.println("Java运行时环境规范供应商:    " + props.getProperty("java.specification.vender"));
     83         System.out.println("Java运行时环境规范名称:    " + props.getProperty("java.specification.name"));
     84         System.out.println("Java的类格式版本号:    " + props.getProperty("java.class.version"));
     85         System.out.println("Java的类路径:    " + props.getProperty("java.class.path"));
     86         System.out.println("加载库时搜索的路径列表:    " + props.getProperty("java.library.path"));
     87         System.out.println("默认的临时文件路径:    " + props.getProperty("java.io.tmpdir"));
     88         System.out.println("一个或多个扩展目录的路径:    " + props.getProperty("java.ext.dirs"));
     89         System.out.println("操作系统的名称:    " + props.getProperty("os.name"));
     90         System.out.println("操作系统的构架:    " + props.getProperty("os.arch"));
     91         System.out.println("操作系统的版本:    " + props.getProperty("os.version"));
     92         System.out.println("文件分隔符:    " + props.getProperty("file.separator"));
     93         System.out.println("路径分隔符:    " + props.getProperty("path.separator"));
     94         System.out.println("行分隔符:    " + props.getProperty("line.separator"));
     95         System.out.println("用户的账户名称:    " + props.getProperty("user.name"));
     96         System.out.println("用户的主目录:    " + props.getProperty("user.home"));
     97         System.out.println("用户的当前工作目录:    " + props.getProperty("user.dir"));
     98     }
     99 
    100     private static void memory() throws SigarException {
    101         Sigar sigar = new Sigar();
    102         Mem mem = sigar.getMem();
    103         // 内存总量
    104         System.out.println("内存总量:    " + mem.getTotal() / 1024L + "K av");
    105         // 当前内存使用量
    106         System.out.println("当前内存使用量:    " + mem.getUsed() / 1024L + "K used");
    107         // 当前内存剩余量
    108         System.out.println("当前内存剩余量:    " + mem.getFree() / 1024L + "K free");
    109         Swap swap = sigar.getSwap();
    110         // 交换区总量
    111         System.out.println("交换区总量:    " + swap.getTotal() / 1024L + "K av");
    112         // 当前交换区使用量
    113         System.out.println("当前交换区使用量:    " + swap.getUsed() / 1024L + "K used");
    114         // 当前交换区剩余量
    115         System.out.println("当前交换区剩余量:    " + swap.getFree() / 1024L + "K free");
    116     }
    117 
    118     private static void cpu() throws SigarException {
    119         Sigar sigar = new Sigar();
    120         CpuInfo infos[] = sigar.getCpuInfoList();
    121         CpuPerc cpuList[] = null;
    122 
    123         System.out.println("cpu 总量参数情况:" + sigar.getCpu());
    124         System.out.println("cpu 总百分比情况:" + sigar.getCpuPerc());
    125         
    126         cpuList = sigar.getCpuPercList();
    127         for (int i = 0; i < infos.length; i++) {// 不管是单块CPU还是多CPU都适用
    128             CpuInfo info = infos[i];
    129             System.out.println("第" + (i + 1) + "块CPU信息");
    130             System.out.println("CPU的总量MHz:    " + info.getMhz());// CPU的总量MHz
    131             System.out.println("CPU生产商:    " + info.getVendor());// 获得CPU的卖主,如:Intel
    132             System.out.println("CPU类别:    " + info.getModel());// 获得CPU的类别,如:Celeron
    133             System.out.println("CPU缓存数量:    " + info.getCacheSize());// 缓冲存储器数量
    134             printCpuPerc(cpuList[i]);
    135         }
    136     }
    137 
    138     private static void printCpuPerc(CpuPerc cpu) {
    139         System.out.println("CPU用户使用率:    " + CpuPerc.format(cpu.getUser()));// 用户使用率
    140         System.out.println("CPU系统使用率:    " + CpuPerc.format(cpu.getSys()));// 系统使用率
    141         System.out.println("CPU当前等待率:    " + CpuPerc.format(cpu.getWait()));// 当前等待率
    142         System.out.println("CPU当前错误率:    " + CpuPerc.format(cpu.getNice()));//
    143         System.out.println("CPU当前空闲率:    " + CpuPerc.format(cpu.getIdle()));// 当前空闲率
    144         System.out.println("CPU总的使用率:    " + CpuPerc.format(cpu.getCombined()));// 总的使用率
    145     }
    146 
    147     private static void os() {
    148         OperatingSystem OS = OperatingSystem.getInstance();
    149         // 操作系统内核类型如: 386、486、586等x86
    150         System.out.println("操作系统:    " + OS.getArch());
    151         System.out.println("操作系统CpuEndian():    " + OS.getCpuEndian());//
    152         System.out.println("操作系统DataModel():    " + OS.getDataModel());//
    153         // 系统描述
    154         System.out.println("操作系统的描述:    " + OS.getDescription());
    155         // 操作系统类型
    156         // System.out.println("OS.getName():    " + OS.getName());
    157         // System.out.println("OS.getPatchLevel():    " + OS.getPatchLevel());//
    158         // 操作系统的卖主
    159         System.out.println("操作系统的卖主:    " + OS.getVendor());
    160         // 卖主名称
    161         System.out.println("操作系统的卖主名:    " + OS.getVendorCodeName());
    162         // 操作系统名称
    163         System.out.println("操作系统名称:    " + OS.getVendorName());
    164         // 操作系统卖主类型
    165         System.out.println("操作系统卖主类型:    " + OS.getVendorVersion());
    166         // 操作系统的版本号
    167         System.out.println("操作系统的版本号:    " + OS.getVersion());
    168     }
    169 
    170     private static void who() throws SigarException {
    171         Sigar sigar = new Sigar();
    172         Who who[] = sigar.getWhoList();
    173         if (who != null && who.length > 0) {
    174             for (int i = 0; i < who.length; i++) {
    175                 // System.out.println("当前系统进程表中的用户名" + String.valueOf(i));
    176                 Who _who = who[i];
    177                 System.out.println("用户控制台:    " + _who.getDevice());
    178                 System.out.println("用户host:    " + _who.getHost());
    179                 // System.out.println("getTime():    " + _who.getTime());
    180                 // 当前系统进程表中的用户名
    181                 System.out.println("当前系统进程表中的用户名:    " + _who.getUser());
    182             }
    183         }
    184     }
    185 
    186     private static void file() throws Exception {
    187         Sigar sigar = new Sigar();
    188         FileSystem fslist[] = sigar.getFileSystemList();
    189         for (int i = 0; i < fslist.length; i++) {
    190             System.out.println("分区的盘符名称" + i);
    191             FileSystem fs = fslist[i];
    192             // 分区的盘符名称
    193             System.out.println("盘符名称:    " + fs.getDevName());
    194             // 分区的盘符名称
    195             System.out.println("盘符路径:    " + fs.getDirName());
    196             System.out.println("盘符标志:    " + fs.getFlags());//
    197             // 文件系统类型,比如 FAT32、NTFS
    198             System.out.println("盘符类型:    " + fs.getSysTypeName());
    199             // 文件系统类型名,比如本地硬盘、光驱、网络文件系统等
    200             System.out.println("盘符类型名:    " + fs.getTypeName());
    201             // 文件系统类型
    202             System.out.println("盘符文件系统类型:    " + fs.getType());
    203             FileSystemUsage usage = null;
    204             usage = sigar.getFileSystemUsage(fs.getDirName());
    205             switch (fs.getType()) {
    206             case 0: // TYPE_UNKNOWN :未知
    207                 break;
    208             case 1: // TYPE_NONE
    209                 break;
    210             case 2: // TYPE_LOCAL_DISK : 本地硬盘
    211                 // 文件系统总大小
    212                 System.out.println(fs.getDevName() + "总大小:    " + usage.getTotal() + "KB");
    213                 // 文件系统剩余大小
    214                 System.out.println(fs.getDevName() + "剩余大小:    " + usage.getFree() + "KB");
    215                 // 文件系统可用大小
    216                 System.out.println(fs.getDevName() + "可用大小:    " + usage.getAvail() + "KB");
    217                 // 文件系统已经使用量
    218                 System.out.println(fs.getDevName() + "已经使用量:    " + usage.getUsed() + "KB");
    219                 double usePercent = usage.getUsePercent() * 100D;
    220                 // 文件系统资源的利用率
    221                 System.out.println(fs.getDevName() + "资源的利用率:    " + usePercent + "%");
    222                 break;
    223             case 3:// TYPE_NETWORK :网络
    224                 break;
    225             case 4:// TYPE_RAM_DISK :闪存
    226                 break;
    227             case 5:// TYPE_CDROM :光驱
    228                 break;
    229             case 6:// TYPE_SWAP :页面交换
    230                 break;
    231             }
    232             System.out.println(fs.getDevName() + "读出:    " + usage.getDiskReads());
    233             System.out.println(fs.getDevName() + "写入:    " + usage.getDiskWrites());
    234         }
    235         return;
    236     }
    237 
    238     private static void net() throws Exception {
    239         Sigar sigar = new Sigar();
    240         String ifNames[] = sigar.getNetInterfaceList();
    241         for (int i = 0; i < ifNames.length; i++) {
    242             String name = ifNames[i];
    243             NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);
    244             System.out.println("网络设备名:    " + name);// 网络设备名
    245             System.out.println("IP地址:    " + ifconfig.getAddress());// IP地址
    246             System.out.println("子网掩码:    " + ifconfig.getNetmask());// 子网掩码
    247             if ((ifconfig.getFlags() & 1L) <= 0L) {
    248                 System.out.println("!IFF_UP...skipping getNetInterfaceStat");
    249                 continue;
    250             }
    251             NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);
    252             System.out.println(name + "接收的总包裹数:" + ifstat.getRxPackets());// 接收的总包裹数
    253             System.out.println(name + "发送的总包裹数:" + ifstat.getTxPackets());// 发送的总包裹数
    254             System.out.println(name + "接收到的总字节数:" + ifstat.getRxBytes());// 接收到的总字节数
    255             System.out.println(name + "发送的总字节数:" + ifstat.getTxBytes());// 发送的总字节数
    256             System.out.println(name + "接收到的错误包数:" + ifstat.getRxErrors());// 接收到的错误包数
    257             System.out.println(name + "发送数据包时的错误数:" + ifstat.getTxErrors());// 发送数据包时的错误数
    258             System.out.println(name + "接收时丢弃的包数:" + ifstat.getRxDropped());// 接收时丢弃的包数
    259             System.out.println(name + "发送时丢弃的包数:" + ifstat.getTxDropped());// 发送时丢弃的包数
    260         }
    261     }
    262 
    263     private static void ethernet() throws SigarException {
    264         Sigar sigar = null;
    265         sigar = new Sigar();
    266         String[] ifaces = sigar.getNetInterfaceList();
    267         for (int i = 0; i < ifaces.length; i++) {
    268             NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]);
    269             if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
    270                     || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) {
    271                 continue;
    272             }
    273             System.out.println(cfg.getName() + "IP地址:" + cfg.getAddress());// IP地址
    274             System.out.println(cfg.getName() + "网关广播地址:" + cfg.getBroadcast());// 网关广播地址
    275             System.out.println(cfg.getName() + "网卡MAC地址:" + cfg.getHwaddr());// 网卡MAC地址
    276             System.out.println(cfg.getName() + "子网掩码:" + cfg.getNetmask());// 子网掩码
    277             System.out.println(cfg.getName() + "网卡描述信息:" + cfg.getDescription());// 网卡描述信息
    278             System.out.println(cfg.getName() + "网卡类型" + cfg.getType());//
    279         }
    280     }
    281 }
  • 相关阅读:
    Azure 存储简介
    Databricks 第6篇:Spark SQL 维护数据库和表
    Databricks 第5篇:Databricks文件系统(DBFS)
    Databricks 第4篇:pyspark.sql 分组统计和窗口
    IDEA分析JAVA内存溢出和内存泄漏
    Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "session closed" [90067-200] 解决
    Java 中初始化 List 集合的 8 种方式!
    java list算法问题(给定一 int 数组返回倒序的最大连续递增的区间(至少大于等于2)数组倒序)
    uni-app知识点:页面滚动到指定位置(即锚点实现)、设置背景颜色backgroundColor无效的问题、导航栏设置角标及动态控制修改角标数字
    @Transactional注解为什么不生效
  • 原文地址:https://www.cnblogs.com/sigm/p/6393284.html
Copyright © 2020-2023  润新知