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

 

目录
相关文章
|
12天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
32 2
|
10天前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
25 3
java读取linux服务器下某文档的内容
|
12天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
26 4
|
13天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
81 5
|
21天前
|
Kubernetes Java Maven
揭秘无服务器革命:Quarkus如何让Java应用在云端“零”负担起飞?
本文介绍如何使用Quarkus从零开始开发无服务器应用,通过示例代码和详细步骤引导读者掌握这一技术。无服务器架构让开发者无需管理服务器,具有自动扩展和成本效益等优势。Quarkus作为Kubernetes Native Java框架,优化了Java应用的启动速度和内存使用,适合无服务器环境。文章涵盖环境搭建、项目创建及部署全流程,并介绍了Quarkus的扩展性和监控工具,助力高效开发与应用性能提升。
27 9
|
1月前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
29天前
|
编解码 前端开发 安全
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
在我们选购阿里云服务器的过程中,不管是新用户还是老用户通常都是通过阿里云的活动去买了,一是价格更加实惠,二是活动中的云服务器配置比较丰富,足可以满足大部分用户的需求,但是面对琳琅满目的云服务器实例、带宽和云盘选项,如何选择更适合自己,成为许多用户比较关注的问题。本文将介绍如何在阿里云的活动中选择合适的云服务器实例、带宽和云盘,以供参考和选择。
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
|
27天前
|
弹性计算 运维 安全
阿里云轻量应用服务器和经济型e实例区别及选择参考
目前在阿里云的活动中,轻量应用服务器2核2G3M带宽价格为82元1年,2核2G3M带宽的经济型e实例云服务器价格99元1年,对于云服务器配置和性能要求不是很高的阿里云用户来说,这两款服务器配置和价格都差不多,阿里云轻量应用服务器和ECS云服务器让用户二选一,很多用户不清楚如何选择,本文来说说轻量应用服务器和经济型e实例的区别及选择参考。
阿里云轻量应用服务器和经济型e实例区别及选择参考
|
28天前
|
机器学习/深度学习 存储 人工智能
阿里云GPU云服务器实例规格gn6v、gn7i、gn6i实例性能及区别和选择参考
阿里云的GPU云服务器产品线在深度学习、科学计算、图形渲染等多个领域展现出强大的计算能力和广泛的应用价值。本文将详细介绍阿里云GPU云服务器中的gn6v、gn7i、gn6i三个实例规格族的性能特点、区别及选择参考,帮助用户根据自身需求选择合适的GPU云服务器实例。
阿里云GPU云服务器实例规格gn6v、gn7i、gn6i实例性能及区别和选择参考
|
21天前
|
弹性计算 人工智能 安全
阿里云推出第九代ECS实例,最高提升30%性能
阿里云推出第九代ECS实例,最高提升30%性能
209 14