java利用sigar获取电脑cpu 内存 硬盘使用率等信息

来源:互联网 发布:淘宝怎么享受极速退款 编辑:程序博客网 时间:2024/05/21 15:50

1 下载安装sigar-1.6.4.zip

    使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息。   

    下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files


   在自己的Java项目中引入sigar.jar

   同时将对应的dll文件或者so文件添加到系统目录。例如:windows下把sigar-x86-winnt.dll(图中三个文件)添加到        c:\WINDOWS\system32或者jdk的bin目录。(如果放到c:\WINDOWS\system32下没用,就放到jdk的bin目录下)

2 代码示例


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

阅读全文
0 0
原创粉丝点击