美文网首页
Sigar java 服务器信息探针、监控

Sigar java 服务器信息探针、监控

作者: IT祖师爷 | 来源:发表于2022-02-09 08:52 被阅读0次

    package org.fh.controller.tools;

    import java.net.InetAddress;

    import java.util.HashMap;

    import java.util.Map;

    import java.util.Properties;

    import org.fh.controller.base.BaseController;

    import org.fh.entity.PageData;

    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.NetInterfaceConfig;

    import org.hyperic.sigar.NetInterfaceStat;

    import org.hyperic.sigar.Sigar;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.ResponseBody;

    /**

    * 说明:服务器信息监控

    * 作者:FH Admin

    * from:fhadmin.cn

    */

    @Controller

    @RequestMapping("/serverRunstate")

    public class ServerRunstateController extends BaseController {

    /**获取常量数据

    * @return

    */

    @RequestMapping(value="/getData")

    @ResponseBody

    public Object getData() throws Exception{

    Map<String,Object> map = new HashMap<String,Object>();

    Sigar sigar = new Sigar();

    String errInfo = "success";

    PageData pd = new PageData();

    property(pd); //基本信息

    gethardDiskData(pd,sigar); //硬盘使用情况

    map.put("pd", pd);

    map.put("result", errInfo);

    return map;

    }

    /**获取事实数据

    * @return

    */

    @RequestMapping(value="/realTimeData")

    @ResponseBody

    public Object realTimeData() throws Exception{

    Map<String,Object> map = new HashMap<String,Object>();

    Sigar sigar = new Sigar();

    String errInfo = "success";

    PageData pd = new PageData();

    getJvmMemoryData(pd); //JVM内存

    getServerMemoryData(pd,sigar); //服务器内存

    getCpuData(pd,sigar); //CPU

    map.put("pd", pd);

    map.put("result", errInfo);

    return map;

    }

    /**获取网速

    * @return

    */

    @RequestMapping(value="/networkspeed")

    @ResponseBody

    public Object networkspeed() throws Exception{

    Map<String,Object> map = new HashMap<String,Object>();

    Sigar sigar = new Sigar();

    String errInfo = "success";

    PageData pd = new PageData();

    long[] fhbytes1 = getNet(sigar);

    Thread.sleep(1000);

    long[] fhbytes2 = getNet(sigar);

    long rxspeed = fhbytes2[0] - fhbytes1[0];

    long txspeed = fhbytes2[1] - fhbytes1[1];

    pd.put("rxspeed", (double) Math.round((rxspeed/2014.0) * 100) / 100); //下载网速

    pd.put("txspeed", (double) Math.round((txspeed/1024.0) * 100) / 100); //上传网速

    map.put("pd", pd);

    map.put("result", errInfo);

    return map;

    }

    /**获取JVM内存数据

    * @param pd

    * @return

    * @throws Exception

    */

    private PageData getJvmMemoryData(PageData pd){

    double byteToMb = 1024.0 * 1024.0;

    double jvmTotal = 0;

    double jvmFree = 0;

    double jvmUse = 0;

    Runtime rt = Runtime.getRuntime();

    jvmTotal = rt.totalMemory() / byteToMb;

    jvmFree = rt.freeMemory() / byteToMb;

    jvmUse = jvmTotal - jvmFree;

    pd.put("totalJvmMemory", (double) Math.round(jvmTotal * 100) / 100); //JVM总内存空间

    pd.put("useJvmMemory", (double) Math.round(jvmUse * 100) / 100); //JVM已使用的内存

    return pd;

    }

    /**获取服务器内存数据

    * @param pd

    * @param sigar

    * @throws Exception

    */

    private void getServerMemoryData(PageData pd, Sigar sigar) throws Exception {

    double byteToGb = 1024.0 * 1024.0 * 1024.0;

    double serveotal = 0;

    double serverUse = 0;

    Mem mem = sigar.getMem();

    serveotal = mem.getTotal() / byteToGb;

    serverUse = mem.getUsed() / byteToGb;

    pd.put("totalServerMemory", (double) Math.round(serveotal * 100) / 100); //服务器总内存空间

    pd.put("useServerMemory", (double) Math.round(serverUse * 100) / 100); //服务器已使用的内存

    }

    /**获取服务器CUP使用率

    * @param pd

    * @param sigar

    * @throws Exception

    */

    private void getCpuData(PageData pd, Sigar sigar) throws Exception {

    CpuInfo infos[] = sigar.getCpuInfoList();

    CpuPerc cpuList[] = null;

    cpuList = sigar.getCpuPercList();

    double cpuuse = 0;

    for (int i = 0; i < infos.length; i++) { //多块或者多核心CPU

    cpuuse += cpuList[i].getCombined() * 100.00;

    }

    pd.put("cpuuse", (double) Math.round(((cpuuse/(infos.length * 100))*100) * 100) / 100 );//使用率

    }

    /**获取服务器硬盘情况

    * @param pd

    * @param sigar

    * @throws Exception

    */

    private void gethardDiskData(PageData pd, Sigar sigar) throws Exception {

    double byteToGb = 1024.0 * 1024.0;

    long totalSize = 0;

    long useSize = 0;

    FileSystem fslist[] = sigar.getFileSystemList();

    for (int i = 0; i < fslist.length; i++) {

    FileSystem fs = fslist[i];

    FileSystemUsage usage = null;

    usage = sigar.getFileSystemUsage(fs.getDirName());

    switch (fs.getType()) {

    case 0: // TYPE_UNKNOWN :未知

    break;

    case 1: // TYPE_NONE

    break;

    case 2: // TYPE_LOCAL_DISK : 本地硬盘

    totalSize += usage.getTotal(); //总大小

    useSize += usage.getUsed(); //已经使用量

    break;

    case 3:// TYPE_NETWORK :网络

    break;

    case 4:// TYPE_RAM_DISK :闪存

    break;

    case 5:// TYPE_CDROM :光驱

    break;

    case 6:// TYPE_SWAP :页面交换

    break;

    }

    }

    pd.put("totalDiskSize",(double) Math.round((totalSize / byteToGb) * 10) / 10); //硬盘总大小

    pd.put("useDiskSize",(double) Math.round((useSize / byteToGb) * 10) / 10); //硬盘已使用大小

    }

    /**获取基础信息

    * @param pd

    * @return

    * @throws Exception

    */

    private PageData property(PageData pd) throws Exception {

    Runtime r = Runtime.getRuntime();

    Properties props = System.getProperties();

    InetAddress addr;

    addr = InetAddress.getLocalHost();

    String ip = addr.getHostAddress();

    Map<String, String> map = System.getenv();

    String userName = map.get("USERNAME");// 获取用户名

    pd.put("userName", userName); //计算机用户

    pd.put("IP", ip); //本地ip地址

    pd.put("HostName", addr.getHostName()); //本地主机名

    pd.put("availableProcessors", r.availableProcessors()); //JVM可以使用的处理器个数

    pd.put("javaversion", props.getProperty("java.version")); //Java的运行环境版本

    pd.put("javahome", props.getProperty("java.home")); //Java的安装路径

    pd.put("javavmversion", props.getProperty("java.vm.specification.version")); //Java的虚拟机规范版本

    pd.put("javavmname", props.getProperty("java.vm.name")); //Java的虚拟机实现名称

    pd.put("javaclassversion", props.getProperty("java.class.version")); //Java的类格式版本号

    pd.put("osarch", props.getProperty("os.arch")); //操作系统的构架

    pd.put("userdir", props.getProperty("user.dir")); //用户的当前工作目录

    return pd;

    }

    /**获取接收字节数

    * @return

    * @throws Exception

    */

    private static long[] getNet(Sigar sigar) throws Exception {

    long[] fhbytes = new long[2];

    String ifNames[] = sigar.getNetInterfaceList();

    for (int i = 0; i < ifNames.length; i++) {

    String name = ifNames[i];

    NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);

    if ((ifconfig.getFlags() & 1L) <= 0L) {

    continue;

    }

    NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);

    long fhRxBytes = ifstat.getRxBytes();

    long fhTxBytes = ifstat.getTxBytes();

    if(fhRxBytes > 0) {

    fhbytes[0] = fhRxBytes;

    fhbytes[1] = fhTxBytes;

    return fhbytes;

    }

    }

    fhbytes[0] = 0;

    fhbytes[1] = 0;

    return fhbytes;

    }

    }

    相关文章

      网友评论

          本文标题:Sigar java 服务器信息探针、监控

          本文链接:https://www.haomeiwen.com/subject/twqwkrtx.html