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

 

目录
打赏
0
0
0
0
6
分享
相关文章
Minecraft配置文件参数说明(JAVA服务器篇)
Minecraft JAVA版服务器启动后会生成server.properties配置文件,位于minecraft_server/根目录下。该文件包含多项关键设置,如游戏模式(gamemode)、最大玩家数(max-players)、难度(difficulty)等。此文档详细说明了各配置项的功能与默认值,帮助用户高效管理服务器环境。
685 60
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
72 3
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
122 23
|
8月前
|
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
174 9
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
190 0
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
100 32
探秘局域网桌面监控:深入剖析 Java 语言核心算法
在数字化办公时代,局域网桌面监控如同企业的“智慧鹰眼”,确保工作效率与数据安全。本文以Java为载体,揭示哈希表在监控中的关键应用。通过高效的数据结构和算法,哈希表能快速索引设备连接信息,大幅提升监控的时效性和响应速度。代码示例展示了如何用Java实现设备网络连接监控,结合未来技术如AI、大数据,展望更智能的监控体系,助力企业在数字化浪潮中稳健前行。
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
230 7
|
8月前
|
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
97 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问