竹笋

首页 » 问答 » 常识 » 同事问我如何定位JVM问题我笑了
TUhjnbcbe - 2022/8/2 17:59:00

你可能一开始会比较畏惧使用复杂的工具去排查问题,又或者是打开了工具感觉无从下手,但是随着实践越来越多,对Java程序和各种框架的运作越来越熟悉,你会发现使用这些工具越来越顺手。

这篇文章中介绍下如何使用JDK自带工具来分析和定位Java程序的问题。

使用JDK自带工具查看JVM情况

JDK自带了很多命令行甚至是图形界面工具,帮助我们查看JVM的一些信息。比如,在我的机器上运行ls命令,可以看到JDK8提供了非常多的工具或程序:

接下来,我会与你介绍些常用的监控工具。你也可以先通过下面这张图了解下各种工具的基本作用:

为了测试这些工具,我们先来写一段代码:启动10个死循环的线程,每个线程分配一个10MB左右的字符串,然后休眠10秒。可以想象到,这个程序会对GC造成压力:

//启动10个线程IntStream.rangeClosed(1,10).mapToObj(i-newThread(()-{while(true){//每一个线程都是一个死循环,休眠10秒,打印10M数据Stringpayload=IntStream.rangeClosed(1,).mapToObj(__-"a").collect(Collectors.joining(""))+UUID.randomUUID().toString();try{TimeUnit.SECONDS.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(payload.length());}})).forEach(Thread::start);TimeUnit.HOURS.sleep(1);

修改pom.xml,配置spring-boot-maven-plugin插件打包的Java程序的main方法类:

plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationmainClassorg.geekbang.time.

1
查看完整版本: 同事问我如何定位JVM问题我笑了