美文网首页JVM
13-VisualVM:多合-故障处理工具

13-VisualVM:多合-故障处理工具

作者: 紫荆秋雪_文 | 来源:发表于2021-06-17 16:25 被阅读0次

VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一,曾经在很长一段时间内时Oracle官方主力发展的虚拟机故障处理工具。VisualVM还有一个很大的优点:不需要被监视的程序基于特殊Agent去运行,因此它的通用性很强,对应用程序实际性能的影响也较小,使得它可以直接应用在生产环境中。

一、VisualVM兼容范围与插件安装

VisualVM基于NetBeans平台开发工具,所以一开始它就具备了通过插件扩展功能的能力,有了插件扩展支持,VisualVM可以做到:

  • 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)
  • 监视应用程序的处理器、垃圾收集、堆、方法区以及线程的信息(jstat、jstack)
  • dump以及分析堆转储快照(jmap、jhat)
  • 方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法
  • 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈
  • 其他插件带来的无限可能性

二、生成、浏览堆转储快照

  • 在“应用程序”窗口中右键单击应用程序节点,然后选择“堆dump”


    image.png
  • 在“应用程序”窗口中双击应用程序节点以打开应用程序标签,然后在“监视”标签中单击“堆Dump”


    image.png
  • 堆dump

@Service
@Slf4j
public class PayOrderFunctionsServiceImpl extends ServiceImpl<PayOrderFunctionsMapper, PayOrderFunctions> implements PayOrderFunctionsService {

    @Autowired
    private ThreadPoolExecutor executor;
    @Autowired
    private PayMemberEnterpriseService payMemberEnterpriseService;
    @Autowired
    private PayOrderFunctionsMapper payOrderFunctionsMapper;
}
堆dump.png

三、分析程序性能

  • 在Profile页签中,VisualVm提供了程序运行期间方法级的处理器执行时间分析以及内存分析。做Profiling分析肯定会对程序运行性能;有比较大的影响,所以一般不在生成环境使用这项功能,或者改用JMC来完成,JMC的Profiling能力更强,对应用的影响非常轻微。

  • 开始性能分析,先选择“CPU”和“内存”按钮中的一个,然后切换到应用程序中对程序进行操作,VisualVM会记录这段时间中应用程序执行过程的所有方法。

  • 如果是进行处理器执行时间分析,将会统计每个方法的执行次数、执行耗时。

  • 如果是内存分析,则会统计每个方法关联的对象数以及这些对象所占的空间。 image.png

四、BTrace动态日志跟踪

BTrace是一个很神奇的VisualVM插件,它本身也是一个可运行的独立程序。BTrace的作用是在不中断目标程序运行的前提下,通过HotSpot虚拟机的Instrument功能动态加入原本并不存在的调试代码。这项功能对实际生产中的程序很有意义:当程序出现问题时,排查错误的一些必要信息时(譬如方法参数、返回值),在开发时并没有打印到日志之中以至于不得不停掉服务时,都可以通过调试增量来加入日志代码以解决问题。

  • 在VisualVM中安装BTrace插件
  • 右键“应用程序”Trace Application选择 image.png
  • BTrace image.png

BTrace实例

  • 代码
package com.lkty.btrace;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BtraceTest {

    public int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) throws IOException {
        BtraceTest test = new BtraceTest();
        BufferedReader reader = new BufferedReader(new InputStreamReader((System.in)));

        for (int i = 0; i < 10; i++) {
            reader.readLine();
            int a = (int) Math.round(Math.random() * 1000);
            int b = (int) Math.round(Math.random() * 1000);
            System.out.println("随机数和 = " + test.add(a, b));
        }
    }
}
  • BTrace中编写代码 image.png
  • BTrace的用途很广泛,打印调用堆栈、参数、返回值只是它最基础的使用形式,在它的网站上有使用BTrace进行性能监视、定位连接泄露、内存泄露、解决多线程竞争问题等使用案例。
  • BTrace能够实现动态修改程序行为,是因为它是基于 Java 虚拟机的 Instrument 开发的。Instrument是 Java虚拟机工具接口(Java Virtual Machine Tool Interface,JVMTI)的重要组件,提供了一套代理(Agent)机制,使得第三方工具程序可以以代理的方式访问和修改Java虚拟机内部的数据。

五、Java Mission Control: 可持续在线的监控工具

  • 用于企业JRE定制管理的 AMC(Java Advanced Management Console)控制台、JUT(Java Usage Tracker)跟踪系统
  • 用于持续收集数据的JFR(Java Flight Recorder)飞行记录仪,JFR是一套内建在HotSpot虚拟机里面的监控和基于事件的信息搜集框架,与其他的监控工具(如JProfiling)相比,Oracle特别强调它“可持续在线”的特性。
  • 用于监控Java虚拟机的JMC(Java Mission Control)

相关文章

网友评论

    本文标题:13-VisualVM:多合-故障处理工具

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