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

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

(0)

相关推荐

  • java实现服务器文件打包zip并下载的示例(边打包边下载)

    使用该方法,可以即时打包文件,一边打包一边传输,不使用任何的缓存,让用户零等待! 复制代码 代码如下: /** *  * mySocket 客户端 Socket * @param file 待打包的文件夹或文件 * @param fileName 打包下载的文件名 * @throws IOException */ private void down(File file, String fileName) throws IOException { OutputStream outputStream

  • java网络编程之socket网络编程示例(服务器端/客户端)

    Java为TCP协议提供了两个类,分别在客户端编程和服务器端编程中使用它们.在应用程序开始通信之前,需要先创建一个连接,由客户端程序发起:而服务器端的程序需要一直监听着主机的特定端口号,等待客户端的连接.在客户端中我们只需要使用Socket实例,而服务端要同时处理ServerSocket实例和Socket实例;二者并且都使用OutputStream和InpuStream来发送和接收数据. 学习一种知识最好的方式就是使用它,通过前面的笔记,我们已经知道如何获取主机的地址信息,现在我们通过一个简单的

  • Java中常见的5种WEB服务器介绍

    Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat.Resin.JBoss.WebSphere 和 WebLogic 等,下面将分别进行介绍. Tomcat 服务器 目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型.轻量级的支持JSP和Servlet 技术的Web服

  • Java通过FTP服务器上传下载文件的方法

    对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

  • Java从服务器上获取时间动态显示在jsp页面实现思路

    Java获取服务器时间,动态显示到jsp页面,大家都是到Java只能获取一次,到页面的时间是静态的,不过通过js和Java的合作,巧妙地实现此功能. 本人是给电视做系统,客户要求页面能显示时间,因为电视浏览器获取的时间不对,没办法只能从服务器获取时间,但是问题来了,服务器的时间获取一次就成静态的了,客户不满意,但也没办法,只能这样.不过这个问题在我这老惦记着,今天看到有个例子,说把Java获取服务器的时间转化成毫秒,然后用js每一秒刷新一次就可以动态显示,所以就有了下面的 复制代码 代码如下:

  • java实现轻量型http代理服务器示例

    复制代码 代码如下: package cn.liangjintang.httpproxy; import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerS

  • java实现两台服务器间文件复制的方法

    本文实例讲述了java实现两台服务器间文件复制的方法.分享给大家供大家参考.具体分析如下: 通常我们使用最多的文件复制功能就是同服务器之间的文件复制功能,这里介绍的是在普通文件复制上功能升级,可以实现两台服务器实现文件的复制,下面一起来看看代码. 1.服务器端 复制代码 代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOut

  • java实现socket从服务器连续获取消息的示例

    服务器端我们用软件模拟,是一个很小巧的软件,下载软件NetAssist:http://xiazai.jb51.net/201403/tools/NetAssist(jb51.net).rar 第二步贴上我们客户端的代码: 复制代码 代码如下: import java.io.DataInputStream; import java.io.IOException;import java.net.Socket; public class Client {      public static fina

  • Java并发编程示例(二):获取和设置线程信息

    Thread类包含几个属性,这些属性所表示的信息能帮助我们识别线程.观察其状态.控制其优先级等.这些线程包括如下几种: ID: 该属性表示每个线程的唯一标识: Name: 该属性存储每个线程的名称: Priority: 该属性存储每个Thread对象的优先级.线程优先级分1到10十个级别,1表示最低优先级,10表示最高优先级.并不推荐修改线程的优先级,但是如果确实有这方面的需求,也可以尝试一下. Status: 该属性存储线程的状态.线程共有六种不同的状态:新建(new).运行(runnable

  • java判断远程服务器上的文件是否存在的方法

    在做数据文件导入到   LEFTII   中是遇到一个文件,在做导入的时候有时候生成的原始文件可能不存在,现在通过加一个判断,判断文件是否存在,起初以为简单的判断文件   file.exists()   存不存在就行了,但是后来事实证明这个只能判断本地的文件是否存在. 这里我们通过一个巧妙的方法告诉大家,就是把远程的文件共享到本地来,通过电脑的衍射可以轻而易举的解决这个问题 过程如下 然后在下面的步骤输入用户名,密码,这样就可以通过判断本地是否存在这个文件就搞定了.

随机推荐