欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java获取服务器基本信息的方法

程序员文章站 2024-03-04 22:58:00
本文实例讲述了java获取服务器基本信息的方法。分享给大家供大家参考。具体如下: 利用第三方的jar包:(hyperic-hq官方网站:http://www.hyperi...

本文实例讲述了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

import java.net.inetaddress; 
import java.net.unknownhostexception; 
import org.hyperic.sigar.cpuinfo; 
import org.hyperic.sigar.cpuperc; 
import org.hyperic.sigar.filesystem; 
import org.hyperic.sigar.filesystemusage; 
import org.hyperic.sigar.mem; 
import org.hyperic.sigar.netflags; 
import org.hyperic.sigar.netinterfaceconfig; 
import org.hyperic.sigar.netinterfacestat; 
import org.hyperic.sigar.operatingsystem; 
import org.hyperic.sigar.sigar; 
import org.hyperic.sigar.sigarexception; 
import org.hyperic.sigar.sigarnotimplementedexception; 
import org.hyperic.sigar.swap;
public class sysinfo {
// 1.cpu资源信息 // a)cpu数量(单位:个) 
public static int getcpucount() throws sigarexception { 
 sigar sigar = new sigar(); 
 try { 
  return sigar.getcpuinfolist().length; 
 } finally { 
  sigar.close(); 
 } 
} // b)cpu的总量(单位:hz)及cpu的相关信息 
public void getcputotal() { 
 sigar sigar = new sigar(); 
 cpuinfo[] infos; 
 try { 
  infos = sigar.getcpuinfolist(); 
  for (int i = 0; i < infos.length; i++) {// 不管是单块cpu还是多cpu都适用 
  cpuinfo info = 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("cache size=" + info.getcachesize());// 缓冲存储器数量 
  } 
 } catch (sigarexception e) { 
  e.printstacktrace(); 
 } 
} // c)cpu的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等(单位:100%) 
public void testcpuperc() { 
 sigar sigar = new sigar(); 
 // 方式一,主要是针对一块cpu的情况 
 cpuperc cpu; 
 try { 
  cpu = sigar.getcpuperc(); 
  printcpuperc(cpu); 
 } catch (sigarexception e) { 
  e.printstacktrace(); 
 } 
 // 方式二,不管是单块cpu还是多cpu都适用 
 cpuperc cpulist[] = null; 
 try { 
  cpulist = sigar.getcpuperclist(); 
 } catch (sigarexception e) { 
  e.printstacktrace(); 
  return; 
 } 
 for (int i = 0; i < cpulist.length; i++) { 
  printcpuperc(cpulist[i]); 
 } 
} private void printcpuperc(cpuperc cpu) { 
 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.内存资源信息 
public void getphysicalmemory() { 
 // a)物理内存信息 
 sigar sigar = new sigar(); 
 mem mem; 
 try { 
  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)系统页面文件交换区信息 
  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"); 
 } catch (sigarexception e) { 
  e.printstacktrace(); 
 } 
} // 3.操作系统信息 // a)取到当前操作系统的名称: 
public string getplatformname() { 
 string hostname = ""; 
 try { 
  hostname = inetaddress.getlocalhost().gethostname(); 
 } catch (exception exc) { 
  sigar sigar = new sigar(); 
  try { 
  hostname = sigar.getnetinfo().gethostname(); 
  } catch (sigarexception e) { 
  hostname = "localhost.unknown"; 
  } finally { 
  sigar.close(); 
  } 
 } 
 return hostname; 
} // b)取当前操作系统的信息 
public void testgetosinfo() { 
 operatingsystem os = 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)取当前系统进程表中的用户信息 
public void testwho() { 
 try { 
  sigar sigar = new sigar(); 
  org.hyperic.sigar.who[] who = sigar.getwholist(); 
  if (who != null && who.length > 0) { 
  for (int i = 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 (sigarexception e) { 
  e.printstacktrace(); 
 } 
} // 4.资源信息(主要是硬盘) // a)取硬盘已有的分区及其详细信息(通过sigar.getfilesystemlist()来获得filesystem列表对象,然后对其进行编历): 
public void testfilesysteminfo() throws exception { 
 sigar sigar = new sigar(); 
 filesystem fslist[] = sigar.getfilesystemlist(); 
 //string dir = system.getproperty("user.home");// 当前用户文件夹路径 
 for (int i = 0; i < fslist.length; i++) { 
  system.out.println("\n~~~~~~~~~~" + i + "~~~~~~~~~~"); 
  filesystem fs = 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; 
} // 5.网络信息 // a)当前机器的正式域名 
public string getfqdn() { 
 sigar sigar = null; 
 try { 
  return inetaddress.getlocalhost().getcanonicalhostname(); 
 } catch (unknownhostexception e) { 
  try { 
  sigar = new sigar(); 
  return sigar.getfqdn(); 
  } catch (sigarexception ex) { 
  return null; 
  } finally { 
  sigar.close(); 
  } 
 } 
} // b)取到当前机器的ip地址 
public string getdefaultipaddress() { 
 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(); 
  string hwaddr = 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; 
  } 
  /* 
   * 如果存在多张网卡包括虚拟机的网卡,默认只取第一张网卡的mac地址,如果要返回所有的网卡(包括物理的和虚拟的)则可以修改方法的返回类型为数组或collection 
   * ,通过在for循环里取到的多个mac地址。 
   */
  hwaddr = cfg.gethwaddr(); 
  break; 
  } 
  return hwaddr != null  hwaddr : null; 
 } catch (exception e) { 
  return null; 
 } finally { 
  if (sigar != null) 
  sigar.close(); 
 } 
} // d)获取网络流量等信息 
public void testnetiflist() throws exception { 
 sigar sigar = new sigar(); 
 string ifnames[] = 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...skipping getnetinterfacestat"); 
  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); 
} // e)一些其他的信息 
public void 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 while creating guid" + e); 
 } finally { 
  if (sigar != null) 
  sigar.close(); 
 } 
}
}

希望本文所述对大家的java程序设计有所帮助。