JVM

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

2021-06-17  本文已影响0人  紫荆秋雪_文

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

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

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

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

@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

三、分析程序性能

四、BTrace动态日志跟踪

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读