Java Profilers探查器使用指南-Java快速入门教程
1. 概述
有时仅仅编写运行的代码是不够的。我们可能想知道内部发生了什么,例如内存是如何分配的,使用一种编码方法而不是另一种编码方法的后果,并发执行的影响,提高性能的领域等。我们可以为此使用探查器。
Java Profiler 是一种在 JVM 级别监视 Java 字节码构造和操作的工具。这些代码构造和操作包括对象创建、迭代执行(包括递归调用)、方法执行、线程执行和垃圾回收。
在本教程中,我们将探索主要的 Java Profilers:JProfiler、YourKit、Java VisualVM、Netbeans Profiler 和 IntelliJ Profiler。
2. JProfiler
JProfiler是许多开发人员的首选。通过直观的用户界面,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 隧道进行本地和远程分析。
YourKit 提供用于商业用途的付费许可证,其中包括免费试用版,以及用于非商业用途的低成本或免费许可证。
以下是 Tomcat 服务器应用程序的内存分析结果的快速浏览:
当我们想要分析抛出的异常时,YourKit 也会派上用场。我们可以很容易地找出抛出的异常类型,以及每个异常发生的次数。
YourKit 有一个有趣的 CPU 分析功能,允许对代码的某些区域进行集中分析,例如线程中的方法或子树。这非常强大,因为它允许通过其假设功能进行条件分析。
图 5 显示了线程分析接口的示例:
我们还可以使用YourKit分析SQL和NoSQL数据库调用。它甚至为执行的实际查询提供视图。
虽然这不是技术考虑因素,但 YourKit 的宽松许可模式使其成为多用户或分布式团队以及单许可证购买的不错选择。
4. Java可视化虚拟机
Java VisualVM 是一个简化但健壮的 Java 应用程序分析工具。这是一个免费的开源分析器。
此工具与 Java 开发工具包 (JDK) 捆绑在一起,直到 JDK 8,但在 JDK 9 中被删除,现在作为独立工具分发:VisualVM Download。
它的操作依赖于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 探查器接口的示例:
Netbeans Profiler 也是轻量级开发和性能分析的不错选择。它提供了一个窗口,用于配置和控制性能分析会话以及显示结果。它提供了了解垃圾回收发生频率的独特功能。
6. IntelliJ Profiler
IntelliJ Profiler 是一个简单但功能强大的 CPU 和内存分配分析工具。它结合了两种流行的Java分析器的强大功能:JFR和异步分析器。
虽然有一些高级功能,但主要重点是易用性。IntelliJ Profiler 允许我们只需单击几下即可开始使用,而无需任何配置,同时提供有用的功能来帮助我们的日常开发工作。
作为IntelliJ IDEA Ultimate的一部分,IntelliJ Profiler只需单击一下即可附加到进程,我们可以在快照和源代码之间导航,就好像它们是快照一样。它的其他功能,如差分火焰图,使我们能够直观地评估不同方法的性能,并快速有效地深入了解运行时操作:
IntelliJ Profiler 适用于 Windows、Linux 和 macOS。