`

Java Sigar JNI收集硬件信息

    博客分类:
  • java
 
阅读更多

Hyperic-Sigar是一个收集系统各项底层信息的工具集.他有如下特点:
1. 收集信息全面
收集CPU,MEM,NETWORK,PROCESS,IOSTAT等
使用Sigar,你完全可以模仿出cpuinfo,meminfo,top,free,ifconfig,ipconfig,netstat,route,df,du,ps,ls等多种unix平台和windows平台的指令.
2.跨平台,支持多数平台
支持的平台包括:windows系列(32系列,IA64系列,AMD64系列),linux系列,freeBsd系列,HPUnix系列,Sun solaris/Sparc/Sparc64系列,macOs系列,AIX系列等

3.提供的API接口全面
sigar本身由C语言开发而成,提供了丰富的API接口,包括:JAVA,.NET,PERL,PHP,PYTHON,RUBY.Sigar.jar包是通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar依赖sigar-amd64-winnt.dll或sigar-x86-winnt.dll,linux操作系统下则依赖libsigar-amd64-linux.so或libsigar-x86-linux.so……而Sigar.jar还依赖于jug-asl-2.0.0.jar、log4j-1.2.14.jar、Junit.jar,

4.下载地址

Hyperic-hq官方网站:http://www.hyperic.com

Sigar.jar下载地址:http://sigar.hyperic.com

 

 

public class CpuInfo extends SigarCommandBase {
	public boolean displayTimes = true;
	public static void main(String[] args) throws Exception {
        //先加载siga动太库 在不同的平台只要加载特定的动态库
        //在IDE环境中,可以不加载动态库 设置natinve lib patch location 既可
		CpuInfo cpuInfo = new CpuInfo();
		cpuInfo.processCommand(args);
		System.out.println(cpuInfo.getMac());
    }
	public CpuInfo(Shell shell) {
		super(shell);
	}
	public CpuInfo() {
		super();
	}
	public String getUsageShort() {
		return "Display cpu information";
	}
	private void output(CpuPerc cpu) {
		println("User Time....." + CpuPerc.format(cpu.getUser()));
		println("Sys Time......" + CpuPerc.format(cpu.getSys()));
		println("Idle Time....." + CpuPerc.format(cpu.getIdle()));
		println("Wait Time....." + CpuPerc.format(cpu.getWait()));
		println("Nice Time....." + CpuPerc.format(cpu.getNice()));
		println("Combined......" + CpuPerc.format(cpu.getCombined()));
		println("Irq Time......" + CpuPerc.format(cpu.getIrq()));
		if (SigarLoader.IS_LINUX) {
			println("SoftIrq Time.." + CpuPerc.format(cpu.getSoftIrq()));
			println("Stolen Time...." + CpuPerc.format(cpu.getStolen()));
		}
		println("");
	}
	public void output(String[] args) throws SigarException {
		org.hyperic.sigar.CpuInfo[] infos = this.sigar.getCpuInfoList();
		CpuPerc[] cpus = this.sigar.getCpuPercList();
		org.hyperic.sigar.CpuInfo info = infos[0];
		long cacheSize = info.getCacheSize();
		println("Vendor........." + info.getVendor());
		println("Model.........." + info.getModel());
		println("Mhz............" + info.getMhz());
		println("Total CPUs....." + info.getTotalCores());
		if ((info.getTotalCores() != info.getTotalSockets()) || (info.getCoresPerSocket() > info.getTotalCores())) {
			println("Physical CPUs.." + info.getTotalSockets());
			println("Cores per CPU.." + info.getCoresPerSocket());
		}
		if (cacheSize != Sigar.FIELD_NOTIMPL) {
			println("Cache size...." + cacheSize);
		}
		println("");
		if (!this.displayTimes) {
			return;
		}
		for (int i = 0; i < cpus.length; i++) {
			println("CPU " + i + ".........");
			output(cpus[i]);
		}
		println("Totals........");
		output(this.sigar.getCpuPerc());

		StringBuffer sb = new StringBuffer("cpu号=" + getCPUSerial() + "\n");

		String[] interfaces = sigar.getNetInterfaceList();
		if (interfaces != null && interfaces.length > 0)
			sb.append("第一个网卡号=" + sigar.getNetInterfaceConfig(interfaces[0]).getHwaddr());

		org.hyperic.sigar.FileSystem[] filesystems = sigar.getFileSystemList();
		if (filesystems != null && filesystems.length > 0)
			sb.append("\n" + "硬盘第一个分区的卷标=" + getHDSerial(filesystems[0].getDevName()));
		System.out.println(sb.toString());
	}
	/**
	 * 返回CPU的闲置率
	 */
	public static double getCpuIdle() {
		Sigar sigar = null;
		try {
			sigar = new Sigar();
			return sigar.getCpuPerc().getIdle();
		} catch (Throwable t) {
			t.printStackTrace();
		} finally {
			if (sigar != null)
				sigar.close();
		}
		return 0;
	}
	/**
	 * @param drive 硬盘驱动器分区 如C,D
	 * @return 该分区的卷标
	 */
	public static String getHDSerial(String drive) {
		String result = "";
		try {
			File file = File.createTempFile("tmp", ".vbs");
			file.deleteOnExit();
			FileWriter fw = new java.io.FileWriter(file);
			String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n" + "Set colDrives = objFSO.Drives\n" + "Set objDrive = colDrives.item(\""
					+ drive + "\")\n" + "Wscript.Echo objDrive.SerialNumber";
			fw.write(vbs);
			fw.close();
			Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
			BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while ((line = input.readLine()) != null) {
				result += line;
			}
			input.close();
			file.delete();
		} catch (Exception e) {

		}
		if (result.trim().length() < 1 || result == null) {
			result = "无磁盘ID被读取";
		}
		return result.trim();
	}
	/**
	 * 获取CPU号,多CPU时,只取第一个
	 * @return
	 */
	public static String getCPUSerial() {
		String result = "";
		try {
			File file = File.createTempFile("tmp", ".vbs");
			file.deleteOnExit();
			FileWriter fw = new java.io.FileWriter(file);
			String vbs = "On Error Resume Next \r\n\r\n" + "strComputer = \".\"  \r\n" + "Set objWMIService = GetObject(\"winmgmts:\" _ \r\n"
					+ "    & \"{impersonationLevel=impersonate}!\\\\\" & strComputer & \"\\root\\cimv2\") \r\n"
					+ "Set colItems = objWMIService.ExecQuery(\"Select * from Win32_Processor\")  \r\n " + "For Each objItem in colItems\r\n "
					+ "    Wscript.Echo objItem.ProcessorId  \r\n " + "    exit for  ' do the first cpu only! \r\n" + "Next                    ";

			fw.write(vbs);
			fw.close();
			Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
			BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while ((line = input.readLine()) != null) {
				result += line;
			}
			input.close();
			file.delete();
		} catch (Exception e) {
			e.fillInStackTrace();
		}
		if (result.trim().length() < 1 || result == null) {
			result = "无CPU_ID被读取";
		}
		return result.trim();
	}
	
}

 

分享到:
评论

相关推荐

    java sigar获得服务器信息

    OSUtil.java public static void main(String[] args) { try { // System信息,从jvm获取 property(); System.out.println("----------------------------------"); // cpu信息 cpu(); System.out.println(...

    java读取硬件信息所需jar包以及sigar-x86-winnt.dll文件

    本篇文章将深入探讨如何使用Sigar库在Java中读取硬件信息,并介绍相关jar包和dll文件的使用。 Sigar是一个跨平台的系统信息工具,由Hyperic公司开发,现在由Eclipse基金会维护。它提供了一个简单的接口来获取各种...

    java通过sigar开源jar包

    Java通过Sigar开源Jar包获取计算机信息是一种常见的系统监控和管理技术。Sigar(System Information Gatherer and Reporter)是由Hyperic公司开发的一个跨平台、跨语言的库,用于获取操作系统和网络设备的各种性能...

    sigar java 监控 本地

    标题中的“sigar java 监控 本地”指的是使用开源库SIGAR(System Information Gatherer and Reporter)来监控Java应用程序在本地操作系统上的运行状态,包括CPU使用率、内存占用、磁盘I/O等关键指标。SIGAR是一个跨...

    java使用sigar检测CPU占用率

    Sigar有C,C#,Java和Perl API,java版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar 依赖sigar-amd64-winnt.dll或sigar-x86-...

    基于java通过第三方jar包sigar的支持,完成对服务器系统的参数监控,包括CPU、内存、硬盘以及网络流量的实时监控.zip

    他们可能创建了一个后台服务,定期调用Sigar的API,收集并处理系统参数,然后将这些信息展示在控制台或者存储在数据库中,以便进一步分析。这样的系统监控方案不仅提供了实时反馈,还有助于历史数据的记录,方便进行...

    基于java的开发源码-sigar-mirror(系统信息收集API-Sigar).zip

    基于java的开发源码-sigar_mirror(系统信息收集API_Sigar).zip 基于java的开发源码-sigar_mirror(系统信息收集API_Sigar).zip 基于java的开发源码-sigar_mirror(系统信息收集API_Sigar).zip 基于java的开发源码-...

    基于Java的sigar_mirror(系统信息收集API_Sigar).zip

    这个压缩包"基于Java的sigar_mirror(系统信息收集API_Sigar).zip"很显然是为了帮助开发者了解如何在Java项目中使用Sigar库。 Sigar库由Hypertable项目开发并维护,它支持多种操作系统,包括但不限于Linux、Windows...

    Java运用第三方开源jar包sigar.jar获取服务器信息

    要使用sigar.jar,首先需要将其添加到项目的类路径中,然后就可以通过Java代码调用其提供的方法来获取服务器信息。 以下是一些常见的使用示例: 1. 获取CPU信息: 可以使用`CpuPerc`类来获取CPU的使用率,包括...

    java查看内存使用情况,启动新进程。sigar调用

    Sigar(System Information Gatherer and Reporter)是一个跨平台的系统信息收集库,它提供了丰富的API来获取系统级别的信息,包括内存使用、CPU负载、网络状态等。在Java中集成Sigar库,可以方便地进行系统级别的...

    使用sigar获取系统信息,内存,磁盘,jvm虚拟机等

    Sigar(System Information Gatherer and Reporter)是一款强大的跨平台系统信息收集库,由Hypertable组织开发。它提供了一种统一的API,允许开发者在多种操作系统上获取系统级别的信息,包括内存、CPU、磁盘、网络...

    基于java的sigar_mirror(系统信息收集API_Sigar).zip

    通过JNI(Java Native Interface)技术,Sigar API允许Java程序调用C语言实现的底层系统调用,从而获得操作系统级别的详细信息。 在Java中使用Sigar API,首先需要添加对应的jar依赖到项目中,这个zip文件可能就...

    借助Sigar API获取操作系统信息

    Sigar(System Information Gatherer and Reporter)是一款强大的跨平台系统信息收集库,由Hypertable组织开发。它提供了一种统一的接口,允许开发者在多种操作系统上获取各种系统级别的信息,包括但不限于CPU状态、...

    如何借助Sigar API获取CPU相关信息

    Sigar(System Information Gatherer and Reporter)是一款强大的跨平台系统信息收集库,它提供了一种简单的方法来获取操作系统级别的信息,包括CPU、内存、网络、磁盘和其他资源的状态。本项目将详细介绍如何利用...

    Java运用sigar.jar获取服务器信息测试类

    总的来说,这个"Java运用sigar.jar获取服务器信息测试类"的目标是展示如何在Java程序中利用`sigar.jar`库来收集和报告服务器的详细信息。通过对CPU、内存、网络和操作系统的监控,可以帮助我们更好地理解服务器的...

    JAVA源码sigar-mirror(系统信息收集API-Sigar)

    JAVA源码sigar-mirror(系统信息收集API-Sigar)

    java(sigar1.6) 获取本地系统信息大全 示例project

    这个项目示例主要展示了如何使用SIGAR库1.6版本来收集和分析本地系统的各种信息,包括JVM、内存、操作系统、文件系统和网络状态。以下是这些知识点的详细说明: 1. **Java虚拟机(JVM)信息**: SIGAR库可以获取...

    Sigar Java实现系统监控

    Sigar(System Information Gatherer and Reporter)是一款强大的跨平台系统信息收集工具,它提供了一种简单的方式来获取操作系统级别的信息,如CPU使用率、内存状态、网络接口统计、进程信息等。在Java环境中,通过...

    java资源sigar-mirror(系统信息收集API-Sigar)

    java资源sigar_mirror(系统信息收集API_Sigar)提取方式是百度网盘分享地址

    基于Java的实例源码-sigar-mirror(系统信息收集API-Sigar).zip

    这个"基于Java的实例源码-sigar-mirror(系统信息收集API-Sigar).zip"文件包含了一系列的Java代码示例,用于展示如何使用Sigar库来获取和处理这些信息。 1. **Sigar简介**:Sigar是由Hyperic公司开发的,现在由...

Global site tag (gtag.js) - Google Analytics