A Guide to Java Profilers
1.概述
有时编写仅运行的代码是不够的。 我们可能想知道内部发生了什么,例如如何分配内存,使用一种编码方法对另一种编码方法的后果,并发执行的含义,提高性能的区域等。我们可以为此使用探查器。
Java Profiler是在JVM级别监视Java字节码构造和操作的工具。 这些代码构造和操作包括对象创建,迭代执行(包括递归调用),方法执行,线程执行和垃圾回收。
在本文中,我们将讨论主要的Java Profiler:JProfiler,YourKit,Java VisualVM和Netbeans Profiler。
2. JProfiler
JProfiler是许多开发人员的首选。 通过一个直观的UI,JProfiler提供了用于查看系统性能,内存使用情况,潜在的内存泄漏和线程分析的界面。
有了这些信息,我们可以轻松知道我们需要在底层系统中进行优化,消除或更改的内容。
JProfiler的界面如下所示:
像大多数探查器一样,我们可以将此工具用于本地和远程应用程序。 这意味着可以对运行在远程计算机上的Java应用程序进行概要分析,而不必在远程计算机上安装任何内容。
JProfiler还为SQL和NoSQL数据库提供了高级配置文件。 它为分析JDBC,JPA / Hibernate,MongoDB,Casandra和HBase数据库提供了特定的支持。
下面的屏幕快照显示了JDBC探测接口以及当前连接列表:
如果我们热衷于了解与数据库的交互的调用树并看到可能泄漏的连接,则JProfiler会很好地处理这一问题。
实时内存是JProfiler的一项功能,它使我们能够查看应用程序当前的内存使用情况。 我们可以查看对象声明和实例或完整调用树的内存使用情况。
对于分配调用树,我们可以选择查看活动对象,垃圾收集对象或两者的调用树。 我们还可以决定此分配树是否应用于特定的类或包或所有的类。
下面的屏幕显示了所有具有实例计数的对象的实时内存使用情况:
JProfiler支持与流行的IDE(例如Eclipse,NetBeans和IntelliJ)集成。 甚至可以从快照导航到源代码!
3. YourKit
YourKit Java Profiler在许多不同的平台上运行,并为每个受支持的操作系统(Windows,MacOS,Linux,Solaris,FreeBSD等)提供单独的安装。
与JProfiler一样,YourKit具有用于可视化线程,垃圾回收,内存使用和内存泄漏的核心功能,并支持通过ssh隧道进行本地和远程配置。
快速浏览一下Tomcat服务器应用程序的内存分析结果:
当我们想分析抛出的异常时,YourKit也很方便。 我们可以轻松地找出引发了什么类型的异常以及每个异常发生的次数。
YourKit具有有趣的CPU分析功能,该功能可对代码的某些区域(例如线程中的方法或子树)进行集中分析。 这非常强大,因为它允许通过假设分析功能进行条件分析。
图5显示了线程分析接口的示例:
我们还可以使用YourKit来分析SQL和NoSQL数据库调用。 它甚至为已执行的实际查询提供视图。
尽管这不是技术因素,但YourKit的许可许可模型使其成为多用户或分布式团队以及单次许可购买的不错选择。
4. Java VisualVM
Java VisualVM是用于Java应用程序的简化而强大的性能分析工具。 默认情况下,此工具与Java开发工具包(JDK)捆绑在一起。 它的操作依赖于JDK中提供的其他独立工具,例如JConsole,jstat,jstack,jinfo和jmap。
下面,我们可以看到一个使用Java VisualVM进行的性能分析会话的简单概述界面:
Java VisualVM的一个有趣优势是我们可以对其进行扩展以开发作为插件的新功能。 然后,我们可以将这些插件添加到Java VisualVM的内置更新中心。
Java VisualVM支持本地和远程配置以及内存和CPU配置。 连接到远程应用程序需要提供凭据(必要时提供主机名/ IP和密码),但不提供对ssh隧道的支持。 我们还可以选择通过即时更新(通常每2秒)启用实时分析。
下面,我们可以看到使用Java VisualVM进行概要分析的Java应用程序的内存外观:
借助Java VisualVM的快照功能,我们可以为分析会话拍摄快照,以供以后分析。
5. NetBeans配置文件
NetBeans Profiler与Oracle的开源NetBeans IDE捆绑在一起。
尽管此探查器与Java VisualVM有很多相似之处,但是当我们希望将所有内容打包在一个程序(IDE + Profiler)中时,这是一个不错的选择。
上面讨论的所有其他探查器都提供了用于增强IDE集成的插件。
下面的屏幕快照显示了NetBeans Profiler界面的示例:
Netbeans Profiler还是进行轻量级开发和配置的好选择。 NetBeans Profiler提供了一个用于配置和控制性能分析会话以及显示结果的窗口。 它具有了解垃圾收集发生频率的独特功能。
6.其他实体轮廓仪
这里值得一提的是Java Mission Control,New Relic和Prefix(来自Stackify),这些在总体上占有较少的市场份额,但是绝对值得一提。 例如,Stackify的Prefix是一款出色的轻量级分析工具,非常适合不仅分析Java应用程序,而且还分析其他Web应用程序。
7.结论
在本文中,我们讨论了性能分析和Java Profiler。 我们研究了每个Profiler的功能,以及什么使一个潜在的选择成为可能。
有许多具有独特特性的Java分析器。 正如我们在本文中看到的,选择使用哪种Java分析器主要取决于开发人员对工具的选择,所需的分析级别以及分析器的功能。