默认情况下,Sun JDK中附带的一个探查器是Java VisualVM。 这个事件探查器非常简单易用,功能强大。
在这篇文章中,我们将看到如何安装它并使用它来分析应用程序。
通常,无需安装它,因为它与JDK一起安装。 但是在几个Unix系统中,例如Ubuntu,情况并非如此。 如果要安装它,只需使用apt-get(或aptitude):
须藤apt-get install visualvm
要启动它,只需启动jvisualvm(Windows的jdk的bin目录中的jvisualvm.exe)。
这将打开以下窗口:
这里没有很多有趣的东西。 要分析应用程序,只需启动它,VisualVM就会检测到它已启动:
之后,您只需双击以查看有关正在运行的应用程序的信息。 您有四个选项卡可用于您的应用程序(“概述”,“监视器”,“线程”,“探查器”)。 我们将看到所有这四个标签。 首先,默认选项卡,概述:
此选项卡包含有关已启动的应用程序的主要信息。 您可以看到主类,命令行参数和JVM参数。 您还可以查看哪种类型的JVM正在运行您的程序以及JVM所在的位置。 您可以看到该程序中设置的所有属性。
一个更有趣的标签是“监视器”标签:
此选项卡跟踪您的应用程序的CPU和内存使用情况。 您在此视图中有4个图。 第一个从左到右,从上到下显示CPU使用率和Garbage Collector CPU使用率。 第二张图显示堆空间和PermGen空间的使用情况。 下一个图显示了应用程序中加载的类的总数,最后一个图显示了当前正在运行的线程数。 通过这些图,您可以查看应用程序占用的CPU过多还是应用程序占用的内存过多。
第三个选项卡提供有关Threads的一些详细信息:
在此视图中,您可以看到应用程序的不同线程如何改变状态以及它们如何演变。 您还可以查看每次进入每种状态的时间,并且可以了解有关所需线程的详细信息。
现在,我认为最有趣的标签是Profiler之一:
第一次打开此选项卡时,它根本不包含任何信息。 您必须先进行一种分析,然后才能查看信息。 我们将从CPU分析开始。 只需单击CPU按钮,仪器就会启动。 检测期间,该应用程序将被阻止。 检测完成后,您可以再次访问该应用程序,并且将在表中显示概要分析的结果。 当然,分析会对您的应用程序造成负担。 通常它是不可见的,但是对于某些应用程序,您可能会失去很多流动性。 这是我通过简单的应用程序获得的结果:
在我的示例中,我们可以看到waitForTimeout方法占用了CPU时间的81.6%。 我们还可以看到,notifyDecision和getSensor方法是紧随其后的两个最消耗CPU的方法,也许对它们进行优化很有趣。 您还可以查看每个方法的调用次数,也许您会发现一个调用时间过多的方法。
我们可以做的下一个性能分析是内存性能分析。 再次在这里,您必须开始分析,仪器将启动,在此期间,应用程序将被冻结。 这是我的申请结果:
在这里,我们可以看到该应用程序存储了一些大的double []和float []数组,EllipseIterator和BasicStroke类也占用了大量的内存空间。
在内存和CPU性能分析中,您都可以将结果保存到文件中以供日后查看。 例如,您可以让应用程序通宵工作,早上保存结果并检查结果,或者进行三个性能分析并比较三个结果。
总而言之,我不得不说这个探查器非常简单,但是使用起来却非常强大。 我们拥有分析器所需的主要功能,并且效果非常好。 这种工具确实可以帮助您改进应用程序,以减少CPU和内存的使用。 当然,这种工具并不能解决所有问题,它只是帮助显示必须改进应用程序的哪一部分,改进部分是开发人员的任务,而不是最简单的。 但是拥有这种工具是一个好的开始。
参考:通过@Blog(“ Baptiste Wicht”)的 JCG合作伙伴 Baptiste Wicht 使用Java VisualVM对应用程序进行概要分析 。
相关文章 :
- 从CLI监视OpenJDK
- 绩效焦虑–关于绩效不可预测性,度量和基准
- JVM选项:-client vs -server
- Java中的低GC:使用原语而不是包装器
翻译自: https://www.javacodegeeks.com/2012/01/profile-your-applications-with-java.html