`
jessen163
  • 浏览: 466528 次
  • 性别: Icon_minigender_1
  • 来自: 潘多拉
社区版块
存档分类
最新评论

sigar使用:在web中应用sigar取得系统信息

阅读更多
[转]
    import java.io.IOException;  
    import java.io.PrintWriter;  
      
    import javax.servlet.ServletException;  
    import javax.servlet.http.HttpServlet;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    import org.hyperic.sigar.Cpu;  
    import org.hyperic.sigar.CpuPerc;  
    import org.hyperic.sigar.Mem;  
    import org.hyperic.sigar.Sigar;  
    import org.hyperic.sigar.Swap;  
      
    public class SigarServlet extends HttpServlet {  
      
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
              
            try {  
                Sigar sigar = new Sigar();  
                CpuPerc perc = sigar.getCpuPerc();  
                Mem mem = sigar.getMem();  
                Swap swap = sigar.getSwap();  
                  
                int cpuUsage = (int)perc.getCombined();  
                int memFree = (int)(mem.getFree()/(1024l*1024l));  
                int memTotal = (int)(mem.getTotal()/(1024l*1024l));  
                  
                int pageFileFree = (int)(swap.getPageOut()/(1024l*1024l));  
                int pageFileTotal = (int)(swap.getPageIn()/(1024l*1024l));  
                int swapFree = (int)(swap.getFree()/(1024l*1024l));  
                int swapTotal = (int)(swap.getTotal()/(1024l*1024l));  
                  
                  
                response.setContentType("text/html;charset=GB2312");  
                PrintWriter out = response.getWriter();  
      
                Cpu cpu = sigar.getCpu();  
                  
                out.println("CPU Usage:"+perc.getCombined());  
                out.println("<br/>");  
                out.println("Memory Free:"+memFree);  
                out.println("<br/>");  
                out.println("Memory Total:"+memTotal);  
                out.println("<br/>");  
                out.println("Swap Free:"+swapFree);  
                out.println("<br/>");  
                out.println("Swap Total:"+swapTotal);  
                out.println("<br/>");  
                out.println("Page Free:"+pageFileFree);  
                out.println("<br/>");  
                out.println("Page Total:"+pageFileTotal);  
      
                out.close();  
      
            } catch (Exception e) {  
                  
            }  
        }  
      
    }  


  
  <?xml version="1.0" encoding="UTF-8"?>  
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
        <display-name>sigar</display-name>  
        <servlet>  
           <servlet-name>sigarServlet</servlet-name>  
           <servlet-class>sigar.SigarServlet</servlet-class>  
        </servlet>  
          
        <servlet-mapping>  
            <servlet-name>sigarServlet</servlet-name>  
            <url-pattern>/sigar</url-pattern>  
        </servlet-mapping>  
          
        <welcome-file-list>  
            <welcome-file>index.html</welcome-file>  
            <welcome-file>index.htm</welcome-file>  
            <welcome-file>index.jsp</welcome-file>  
            <welcome-file>default.html</welcome-file>  
            <welcome-file>default.htm</welcome-file>  
            <welcome-file>default.jsp</welcome-file>  
        </welcome-file-list>  
    </web-app>  



需要的jar:
.sigar_shellrc
pdh.dll
sigar-1.5.0.1.jar
sigar-x86-winnt.dll
sigar-x86-winnt.lib

测试结果:

访问http://127.0.0.1:8080/sigar/sigar

CPU Usage:0.22815533980582525
Memory Free:863
Memory Total:2046
Swap Free:2048
Swap Total:4330
Page Free:0
Page Total:0







=============================================
package cn.com.mypm.common.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;

import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.SigarLoader;
import org.hyperic.sigar.cmd.Shell;
import org.hyperic.sigar.cmd.SigarCommandBase;


public class CpuInfo extends SigarCommandBase {

    public boolean displayTimes = true;

    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());
    }

    public static void main(String[] args) throws Exception {
        //先加载siga动太库 在不同的平台只要加载特定的动态库,这里我就全加载不区分了
        //在IDE环境中,可以不加载动态库 设置natinve lib patch location 既可
        File nativeDir = new File("E:\\mypm10_new\\mypmdoc\\WebRoot\\WEB-INF\\native");
        File[] libs = nativeDir.listFiles();
        for (int i = 0; i < libs.length; i++) {
            if (libs[i].isFile())
                try {
                    System.load(new File(nativeDir, libs[i].getName()).getPath());
                } catch (Throwable t) {

                }
        }
        new CpuInfo().processCommand(args);
    }

    /**
     *
     * 返回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();
    }
}



分享到:
评论
1 楼 kill_e680 2012-03-04  
取CPU号和取硬盘号,在linux下可以用吗?

相关推荐

    sigar 获取系统信息

    Sigar(System Information Gatherer and Reporter)是一款强大的跨平台系统信息收集库,它允许开发者以一致的方式获取多种操作系统上的系统状态信息,包括但不限于CPU使用率、内存利用率、磁盘使用情况等。...

    sigar-1.6.4

    解决java引入sigar运行时报错"java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Mem.gather",将压缩包解压后,放入本地项目lib中即可解决该类问题,该jar包由官网下载

    sigar读取系统信息.rar

    为了在实际项目中使用Sigar,开发者需要将对应的库文件链接到他们的应用程序中,并且引入Sigar的头文件。在Java中,可以使用Hadoop的Sigar库,这是一个Java封装的版本,它提供了与原生库相同的接口。在C/C++或其他...

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

    在Java中使用Sigar库获取系统内存信息,主要涉及以下几个方面: 1. **总内存**:通过`Sigar.getMem()`方法可以获取系统的总内存信息,包括物理内存总量、可用内存、已用内存等。 2. **交换内存**:使用`Sigar....

    sigar 获取OS系统信息

    在本实例中,我们将深入探讨如何使用sigar库来获取这些关键的系统信息。 首先,我们需要下载并引入`hyperic-sigar-1.6.4`压缩包。这个版本包含了Java接口,允许我们用Java语言来调用Sigar的API。解压后,你会看到...

    sigar获取系统属性的jar

    标题中的"sigar获取系统属性的jar"表明我们关注的是Sigar库在Java环境中的应用,即`sigar.jar`,这是一个Java版本的接口,可以调用不同平台下的本地库来获取系统信息。 Sigar库由Hyperic公司开发,现已成为开源...

    hyperic-sigar-1.6.4完整源码

    可以收集的信息 CPU信息:包括基本信息(vendor、model、mhz、cacheSize)和统计信息(user、sys、idle、nice、wait) ...系统信息:包括操作系统版本,系统资源限制情况,系统运行时间以及负载,JAVA的版本信息等

    Sigar使用之:取得系统内存的数据

    程序用到的jar 博文链接:https://wangrui.iteye.com/blog/153002

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

    在Java应用中使用Sigar,需要引入sigar.jar库,并确保相应的系统库(如libsigar-x86-linux.so或libsigar-amd64-win32.dll)能在运行时被找到。 安装 Sigar: 1. 下载最新版本的Sigar库,通常为.zip格式的压缩包。 2...

    系统信息监控sigar

    使用SIGAR时,你需要将其库文件(如`libsigar-amd64-linux.so`)和对应的JAR包(可能包含`sigar.jar`)一起包含在你的项目中。`testsigar`目录可能包含了SIGAR库的一些测试用例或者示例代码,这对于理解和学习如何...

    使用sigar监控web服务器软硬件信息

    Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API。 Sigar API 提供一个方便的接口来收集系统信息,如: ◆系统内存,页面交换,cpu,平均负载,运行时间,...

    sigar-sigar-1.6.4.tar.gz

    开源工具包 SIGAR System Information Gatherer And Reporter 即 系统信息收集和报告 官方站点: http: support hyperic com display SIGAR Home;jsessionid A9705887A07D20BBAC9A96500BC60822 SIGAR 官方站点 写道...

    Sigar Java实现系统监控

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

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

    在Java程序中,你可以通过以下步骤来使用Sigar: 1. 初始化Sigar实例:`Sigar sigar = new Sigar();` 2. 调用相应的API获取内存信息:例如,`Mem mem = sigar.getMem();` 将返回一个`Mem`对象,包含了系统的总内存...

    sigar使用教程

    在Java环境中,主要使用sigar.jar,这是一个封装了底层C实现的库,通过JNI(Java Native Interface)调用操作系统原生API来获取数据。 在Windows系统下,sigar.jar依赖于相应的动态链接库,例如sigar-amd64-winnt....

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

    在“借助Sigar API获取操作系统信息”这个项目中,你将学习如何利用Sigar库来获取和报告操作系统的关键信息。首先,你需要在你的开发环境中安装Sigar库,这通常涉及下载相应的二进制包,并将其添加到你的项目类路径...

    借助Sigar API获取网络信息

    Sigar(System Information Gatherer and Reporter)是一款强大的跨平台系统信息收集库,它提供了一种简单的方法来获取操作系统级别的信息,包括但不限于网络状态、进程信息、内存使用情况、磁盘统计等。在Java环境...

    sigar的jar包及dll文件

    在Java应用中使用Sigar,你需要包含对应的JAR包到类路径中。这些JAR包通常包含了Java接口,用于调用平台特定的底层C代码(通过JNI)。JAR包中的类提供了获取系统信息的方法,例如`org.hyperic.sigar.Sigar`是主要的...

    JAVA 服务器相关数据获取与解析

    JAVA 获取服务器CPU、磁盘、用户连接、内存、操作系统、网络等数据信息 支持window、linux 操作系统,包含完整的依赖库文件 依赖文件:sigar.jar、sigar-amd64-winnt.dll、sigar-x86-winnt.dll、sigar-x86-winnt.lib

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

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

Global site tag (gtag.js) - Google Analytics