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程序设计有所帮助。