java获取服务器基本信息的方法
本文实例讲述了java获取服务器基本信息的方法。分享给大家供大家参考。具体如下:
利用第三方的jar包:(Hyperic-hq官方网站:http://www.hyperic.com)通过Hyperic-hq产品的基础包sigar.jar来实现服务器状态数据的获取。Sigar.jar包是通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar依赖sigar-amd64-winnt.dll或sigar-x86-winnt.dll,linux操作系统下则依赖libsigar-amd64-linux.so或libsigar-x86-linux.so
importjava.net.InetAddress; importjava.net.UnknownHostException; importorg.hyperic.sigar.CpuInfo; importorg.hyperic.sigar.CpuPerc; importorg.hyperic.sigar.FileSystem; importorg.hyperic.sigar.FileSystemUsage; importorg.hyperic.sigar.Mem; importorg.hyperic.sigar.NetFlags; importorg.hyperic.sigar.NetInterfaceConfig; importorg.hyperic.sigar.NetInterfaceStat; importorg.hyperic.sigar.OperatingSystem; importorg.hyperic.sigar.Sigar; importorg.hyperic.sigar.SigarException; importorg.hyperic.sigar.SigarNotImplementedException; importorg.hyperic.sigar.Swap; publicclassSysInfo{ //1.CPU资源信息//a)CPU数量(单位:个) publicstaticintgetCpuCount()throwsSigarException{ Sigarsigar=newSigar(); try{ returnsigar.getCpuInfoList().length; }finally{ sigar.close(); } }//b)CPU的总量(单位:HZ)及CPU的相关信息 publicvoidgetCpuTotal(){ Sigarsigar=newSigar(); CpuInfo[]infos; try{ infos=sigar.getCpuInfoList(); for(inti=0;i<infos.length;i++){//不管是单块CPU还是多CPU都适用 CpuInfoinfo=infos[i]; System.out.println("mhz="+info.getMhz());//CPU的总量MHz System.out.println("vendor="+info.getVendor());//获得CPU的卖主,如:Intel System.out.println("model="+info.getModel());//获得CPU的类别,如:Celeron System.out.println("cachesize="+info.getCacheSize());//缓冲存储器数量 } }catch(SigarExceptione){ e.printStackTrace(); } }//c)CPU的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等(单位:100%) publicvoidtestCpuPerc(){ Sigarsigar=newSigar(); //方式一,主要是针对一块CPU的情况 CpuPerccpu; try{ cpu=sigar.getCpuPerc(); printCpuPerc(cpu); }catch(SigarExceptione){ e.printStackTrace(); } //方式二,不管是单块CPU还是多CPU都适用 CpuPerccpuList[]=null; try{ cpuList=sigar.getCpuPercList(); }catch(SigarExceptione){ e.printStackTrace(); return; } for(inti=0;i<cpuList.length;i++){ printCpuPerc(cpuList[i]); } }privatevoidprintCpuPerc(CpuPerccpu){ System.out.println("User:"+CpuPerc.format(cpu.getUser()));//用户使用率 System.out.println("Sys:"+CpuPerc.format(cpu.getSys()));//系统使用率 System.out.println("Wait:"+CpuPerc.format(cpu.getWait()));//当前等待率 System.out.println("Nice:"+CpuPerc.format(cpu.getNice()));// System.out.println("Idle:"+CpuPerc.format(cpu.getIdle()));//当前空闲率 System.out.println("Total:"+CpuPerc.format(cpu.getCombined()));//总的使用率 }//2.内存资源信息 publicvoidgetPhysicalMemory(){ //a)物理内存信息 Sigarsigar=newSigar(); Memmem; try{ mem=sigar.getMem(); //内存总量 System.out.println("Total="+mem.getTotal()/1024L+"Kav"); //当前内存使用量 System.out.println("Used="+mem.getUsed()/1024L+"Kused"); //当前内存剩余量 System.out.println("Free="+mem.getFree()/1024L+"Kfree");//b)系统页面文件交换区信息 Swapswap=sigar.getSwap(); //交换区总量 System.out.println("Total="+swap.getTotal()/1024L+"Kav"); //当前交换区使用量 System.out.println("Used="+swap.getUsed()/1024L+"Kused"); //当前交换区剩余量 System.out.println("Free="+swap.getFree()/1024L+"Kfree"); }catch(SigarExceptione){ e.printStackTrace(); } }//3.操作系统信息//a)取到当前操作系统的名称: publicStringgetPlatformName(){ Stringhostname=""; try{ hostname=InetAddress.getLocalHost().getHostName(); }catch(Exceptionexc){ Sigarsigar=newSigar(); try{ hostname=sigar.getNetInfo().getHostName(); }catch(SigarExceptione){ hostname="localhost.unknown"; }finally{ sigar.close(); } } returnhostname; }//b)取当前操作系统的信息 publicvoidtestGetOSInfo(){ 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)取当前系统进程表中的用户信息 publicvoidtestWho(){ try{ Sigarsigar=newSigar(); org.hyperic.sigar.Who[]who=sigar.getWhoList(); if(who!=null&&who.length>0){ for(inti=0;i<who.length;i++){ System.out.println("\n~~~~~~~~~"+String.valueOf(i)+"~~~~~~~~~"); org.hyperic.sigar.Who_who=who[i]; System.out.println("getDevice()="+_who.getDevice()); System.out.println("getHost()="+_who.getHost()); System.out.println("getTime()="+_who.getTime()); //当前系统进程表中的用户名 System.out.println("getUser()="+_who.getUser()); } } }catch(SigarExceptione){ e.printStackTrace(); } }//4.资源信息(主要是硬盘)//a)取硬盘已有的分区及其详细信息(通过sigar.getFileSystemList()来获得FileSystem列表对象,然后对其进行编历): publicvoidtestFileSystemInfo()throwsException{ Sigarsigar=newSigar(); FileSystemfslist[]=sigar.getFileSystemList(); //Stringdir=System.getProperty("user.home");//当前用户文件夹路径 for(inti=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()); FileSystemUsageusage=null; try{ usage=sigar.getFileSystemUsage(fs.getDirName()); }catch(SigarExceptione){ if(fs.getType()==2) throwe; continue; } switch(fs.getType()){ case0://TYPE_UNKNOWN:未知 break; case1://TYPE_NONE break; case2://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"); doubleusePercent=usage.getUsePercent()*100D; //文件系统资源的利用率 System.out.println("Usage="+usePercent+"%"); break; case3://TYPE_NETWORK:网络 break; case4://TYPE_RAM_DISK:闪存 break; case5://TYPE_CDROM:光驱 break; case6://TYPE_SWAP:页面交换 break; } System.out.println("DiskReads="+usage.getDiskReads()); System.out.println("DiskWrites="+usage.getDiskWrites()); } return; }//5.网络信息//a)当前机器的正式域名 publicStringgetFQDN(){ Sigarsigar=null; try{ returnInetAddress.getLocalHost().getCanonicalHostName(); }catch(UnknownHostExceptione){ try{ sigar=newSigar(); returnsigar.getFQDN(); }catch(SigarExceptionex){ returnnull; }finally{ sigar.close(); } } }//b)取到当前机器的IP地址 publicStringgetDefaultIpAddress(){ Stringaddress=null; try{ address=InetAddress.getLocalHost().getHostAddress(); //没有出现异常而正常当取到的IP时,如果取到的不是网卡循回地址时就返回 //否则再通过Sigar工具包中的方法来获取 if(!NetFlags.LOOPBACK_ADDRESS.equals(address)){ returnaddress; } }catch(UnknownHostExceptione){ //hostnamenotinDNSor/etc/hosts } Sigarsigar=newSigar(); try{ address=sigar.getNetInterfaceConfig().getAddress(); }catch(SigarExceptione){ address=NetFlags.LOOPBACK_ADDRESS; }finally{ sigar.close(); } returnaddress; }//c)取到当前机器的MAC地址 publicStringgetMAC(){ Sigarsigar=null; try{ sigar=newSigar(); String[]ifaces=sigar.getNetInterfaceList(); Stringhwaddr=null; for(inti=0;i<ifaces.length;i++){ NetInterfaceConfigcfg=sigar.getNetInterfaceConfig(ifaces[i]); if(NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) ||(cfg.getFlags()&NetFlags.IFF_LOOPBACK)!=0 ||NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())){ continue; } /* *如果存在多张网卡包括虚拟机的网卡,默认只取第一张网卡的MAC地址,如果要返回所有的网卡(包括物理的和虚拟的)则可以修改方法的返回类型为数组或Collection *,通过在for循环里取到的多个MAC地址。 */ hwaddr=cfg.getHwaddr(); break; } returnhwaddr!=nullhwaddr:null; }catch(Exceptione){ returnnull; }finally{ if(sigar!=null) sigar.close(); } }//d)获取网络流量等信息 publicvoidtestNetIfList()throwsException{ Sigarsigar=newSigar(); StringifNames[]=sigar.getNetInterfaceList(); for(inti=0;i<ifNames.length;i++){ Stringname=ifNames[i]; NetInterfaceConfigifconfig=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{ NetInterfaceStatifstat=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(SigarNotImplementedExceptione){ }catch(SigarExceptione){ print(e.getMessage()); } } }voidprint(Stringmsg){ System.out.println(msg); }//e)一些其他的信息 publicvoidgetEthernetInfo(){ Sigarsigar=null; try{ sigar=newSigar(); String[]ifaces=sigar.getNetInterfaceList(); for(inti=0;i<ifaces.length;i++){ NetInterfaceConfigcfg=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(Exceptione){ System.out.println("ErrorwhilecreatingGUID"+e); }finally{ if(sigar!=null) sigar.close(); } } }
希望本文所述对大家的java程序设计有所帮助。