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

简介: Sigar java 服务器信息探针、监控
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;
  }
}

 

目录
相关文章
|
1月前
|
存储 监控 算法
探秘局域网桌面监控:深入剖析 Java 语言核心算法
在数字化办公时代,局域网桌面监控如同企业的“智慧鹰眼”,确保工作效率与数据安全。本文以Java为载体,揭示哈希表在监控中的关键应用。通过高效的数据结构和算法,哈希表能快速索引设备连接信息,大幅提升监控的时效性和响应速度。代码示例展示了如何用Java实现设备网络连接监控,结合未来技术如AI、大数据,展望更智能的监控体系,助力企业在数字化浪潮中稳健前行。
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
运维 监控 算法
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
65 32
|
3月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
54 8
|
3月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
114 9
|
3月前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
69 3
|
3月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
112 2
|
3月前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
36 2
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
1312 2
|
3月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息

热门文章

最新文章