UAVStack JVM监控分析工具:图形化展示采集及分析监控数据

简介: UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据;同时提供JVM基本参数获取、内存dump、线程分析、内存分配采样和热点方法分析等功能。

引言

作为AllInOne的智能化服务技术栈,UAVStack提供了非常全面的监控数据采样功能,同时支持数据监控与预警。近期,我们整合了原有的数据采集展示功能,新增JVM分析功能,推出了更易用的JVM监控分析工具。

熟悉JDK的开发者都知道,JDK本身提供了一套JVM分析工具,包括jinfo、jmap、jstack等。用户可以通过命令行轻松获取JVM内存堆栈信息、内存对象分配以及JVM启动基本参数信息。但这些工具需要在命令行环境中执行,且生产环境下则需要通过堡垒机转发。

开源社区一些不错的JVM分析工具也可以提供获取JVM基本信息、追踪堆栈、获取内存信息等功能,但同样需要命令行CLI的支持。

UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据;同时提供JVM基本参数获取、内存dump、线程分析、内存分配采样和热点方法分析等功能。

一、架构

JVM监控分析工具基于UAVStack既有架构,整体分为前端、后台及中间件增强框架(MOF)。其中:

  • 前端负责展示数据、向后台发送用户执行指令;
  • 后台负责下发指令、响应用户查询、处理采集到的数据;
  • 中间件增强框架(MOF)负责接收后台下发的指令、执行指令并返回数据或将数据写入文件,然后通过UAV提供的文件归集功能上送数据。

整体架构流程如下图所示:

二、关键技术

2.1 JMX

JMX提供相关接口,获取基础的JVM监控数据,如内存堆大小、GC情况等,是JVM监控数据的基础。

2.2 中间件增强框架(MOF)

作为分析工具整条链路的基础,MOF依附于用户应用,主要提供以下基础支持:

  • 基础数据采集:MOF植入应用中,JMX定期获取并上报相关JVM的基本信息数据,为展示和预警提供数据基础。
  • 请求捕获、指令执行:JVM监控分析工具的大多数功能都需要下发指令至应用所在的服务器。MOF负责把下发指令的请求拦截下来,执行并返回对应的结果。

2.3 Java Attach API

Java Attach API是由Sun提供的一套非标准API,可以将用户连接到运行中的虚拟机进程上,进行agent的挂载等操作。

在JVM监控分析工具中,Java Attach API主要用于Attach到虚拟机进程,进行如下操作:

  • 获取JMX Connection:从外部获取JVMConnection,得到MXBean,抓取运行数据。(CPU采样分析)
  • 获取VirtualMachine对象:调用接口,得到堆内存分布信息。(内存采样分析)

三、功能展示

3.1 基本监控

选择应用实例后即可进入基本监控页面。

该页面主要展示CPU使用率、线程情况、内存占用和GC情况。用户可以根据需求调整时间范围,查看不同时段的监控数据。

3.2 JVM摘要

JVM摘要页面显示当前虚拟机的基本参数信息,包括基本信息、JVM参数和系统属性。其中:

-基本信息包括pid、主机信息、启动参数以及JVM的启动时间等最基本、最重要的信息;

  • JVM参数包括所有JVM启动参数,用户可查看指定的堆大小、垃圾回收器信息等;
  • 系统属性包括写入System.Properties中的所有配置信息以及Javaagent的配置属性。

3.3 线程分析

线程分析通过执行jstack获取线程基本信息,并对输出结果进行分析,得到线程状态数量、有无死锁等信息。

3.4 内存Dump

内存Dump通过执行jmap获取指定JVM的堆栈dump文件。

用户可以便捷地在前端一键生成dump,不需要再登录堡垒机。点击“刷新”可以查看近期dump内存的操作记录。

3.5 CPU分析

CPU分析是基于线程栈的采样分析,主要提供两个功能:线程执行时间以及方法热点采样。

-线程执行时间是指线程在采样期间的活动时间。查询结果按照线程活动总时间排序,同时提供线程名称和线程执行时间信息,用户可据此判断应用的执行情况。

-方法热点采样统计所有方法的执行时间,提供方法的类名和方法名信息。其中,方法的自用执行时间不包括方法调用其他方法的执行时间。查询结果按照方法的自用执行时间降序排序,用户可以查看当前应用内部耗时较长的执行方法,判断应用是否异常、是否需要优化。

3.6 内存分析

内存分析是基于线程以及堆的统计采样分析,主要提供两个功能:每个线程的内存分配和堆内分配细节。

-线程内存分配提供每个线程的内存分配大小和线程名称等信息,按照内存分配大小降序排列。用户可查看当前占用内存较大的线程。

-堆内分配提供了各个类在堆内的分配实例数以及所占用的堆内存,按照堆内存大小降序排列。用户可把该功能当作简易的dump及分析工具,快速分析内存分配情况,发现内存分配问题。

总结

JVM监控分析工具是从监控、分析到展示的一体化工具。JDK自带的工具虽然也可以实现除CPU分析之外的其他功能,但不够便捷,也无法实现从采样、分析到图形化展示的一体化效果。JVM监控分析工具解决了开发人员没有线上应用堡垒机权限、无法分析采集到的数据等痛点,同时提供CPU与内存采样分析等功能,以较低的性能开销获取较为全面的JVM运行数据,帮助应用开发人员发现与分析问题,为应用开发优化提供参考依据。

UAVStack已在Github上开放源码,并提供了安装部署、架构说明和用户指南等双语文档。

官方网站:https://uavorg.github.io/main/

开源地址:https://github.com/uavorg

作者:张明明

首发于:UAVStack智能运维

相关文章
|
1月前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
64 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
1月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
32 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
1月前
|
JavaScript 前端开发 Java
jvm的jshell,学生的工具
本文介绍了JVM的jshell工具,它为Java平台添加了REPL(读取-评估-打印循环)功能,使得学习、探索编码和原型代码变得更加便捷,但作者认为其在实际开发中较为鸡肋。
31 1
jvm的jshell,学生的工具
|
28天前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
1月前
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
51 2
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
44 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
存储 Java PHP
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
60 0
|
3月前
|
监控 JavaScript Java
JVM源码级别分析G1发生FullGC元凶的是什么
线上系统遭遇频繁Old GC问题,监控显示出现多次“to-space exhausted”日志,这表明垃圾回收过程中因年轻代 Survivor 区或老年代空间不足导致对象晋升失败。通过 JVM 源码分析,此问题源于对象转移至老年代失败时,JVM 无法找到足够的空间存放存活对象。进一步排查发现大对象分配占用了预留空间,加剧了空间不足的情况。使用 JFR 分析工具定位到定期报表序列化导致大量大对象生成,通过改用堆外内存进行序列化输出,最终解决了频繁 Old GC 问题。
122 0
|
3月前
|
Arthas Prometheus 监控
使用JDK自带工具调优JVM的常用命令
使用JDK自带工具调优JVM的常用命令
|
1月前
|
存储 安全 Java
jvm 锁的 膨胀过程?锁内存怎么变化的
【10月更文挑战第3天】在Java虚拟机(JVM)中,`synchronized`关键字用于实现同步,确保多个线程在访问共享资源时的一致性和线程安全。JVM对`synchronized`进行了优化,以适应不同的竞争场景,这种优化主要体现在锁的膨胀过程,即从偏向锁到轻量级锁,再到重量级锁的转变。下面我们将详细介绍这一过程以及锁在内存中的变化。
37 4
下一篇
无影云桌面