Java Profilers

2025年5月3日 | 10 分钟阅读

Java Profilers 是理解 Java 应用程序行为和排查性能问题的最佳工具。它们监控 JVM 的字节码执行,并提供垃圾回收、堆内存使用、异常、类加载等详细信息。

有时我们需要了解应用程序的内部性能。为了优化应用程序,仅仅编写能够运行的代码是不够的;我们还需要了解其内部性能,例如内存分配、并发执行的影响、应该改进的方面等等。Profiler 帮助我们在字节码层面了解 JVM 执行的状态。

有几种 Java Profilers 可用。在本节中,我们将讨论一些领先的 Java Profilers,例如 JProfilerYourKitJava VisualVMNetbeans Profiler

1) JProfiler

JProfiler 是市场上领先的 Java Profiler。它是许多开发者的首选。它提供了一个直观的用户界面,用于查看系统性能、内存使用情况、潜在的内存泄漏和线程分析。

利用其丰富的功能,我们可以轻松跟踪性能问题并优化我们的 Java 应用程序。

它是一个跨平台工具,可以下载用于不同的操作系统,如 Windows、Mac OS、Linux、Solaris 等。它还支持不同的 IDE,如 NetBeansEclipseIntelliJ 等。

可以通过此 链接 下载 JProfiler。

Java Profilers

它提供了许多功能,如内存分析、堆栈分析器、CPU 分析、线程分析、数据库等,用于跟踪不同部分中的性能问题。

JProfiler 可用于本地和远程应用程序。使用 JProfiler,可以对运行在远程服务器上的 Java 应用程序进行分析,而无需安装任何组件。

它还支持 SQLNoSQL 数据库。它支持对 JDBCJPA/HibernateHbase 数据库、MongoDBCasandra 的分析。

下图显示了数据库分析。

Java Profilers

让我们详细讨论它的功能。

JProfiler 的功能

JProfiler 提供了几个强大的功能来监控和跟踪不同区域的性能问题。JProfiler 的一些关键功能如下。

操作模式

JProfiler 提供以下操作模式:

  • 本地会话的实时分析
  • 远程会话的实时分析
  • 离线分析和触发器
  • 快照比较
  • 查看 HPROF 快照
  • 请求跟踪

堆栈分析器 (Heap Walker)

堆栈分析器允许我们拍摄堆的快照,并通过执行选择步骤深入到感兴趣的对象。堆栈分析器有以下五个视图:

  • 分配
  • 最大的对象
  • 引用
  • 数据
  • 时间
  • 检查
  • Graph

CPU 分析

JProfiler 提供各种记录调用树以优化 Java 项目的方法。我们可以为所有视图选择线程或线程组以及线程状态。所有视图都可以按方法、类、组件或包级别进行汇总。CPU 视图部分包含以下组件:

  • 调用树
  • 热点
  • 调用图
  • 方法统计
  • 调用追踪器

内存分析

JProfiler 的内存视图部分提供了内存使用的动态视图,并显示了关于分配热点的信息。每个视图都有许多聚合级别,并可以显示活动对象和已垃圾回收的对象。

它包含以下组件:

  • 所有对象
  • 已记录对象
  • 分配调用树
  • 分配热点
  • 类追踪器

线程分析

JProfiler 为线程分析提供以下视图:

  • 线程历史
  • 线程监控器
  • 线程转储

监视器分析

JProfiler 为监视器分析提供以下视图:

  • 当前锁定图
  • 当前监视器
  • 锁定历史图
  • 监视器历史
  • 监视器使用统计

VM Telemetry (虚拟机遥测)

JProfiler 提供多个遥测视图来分析 JVM 的内部状态。它提供以下视图:

  • 已记录对象
  • 已记录吞吐量
  • GC 活动
  • 线程
  • CPU 负载

数据库

JProfiler 为以下数据库提供特定探针:

  • JDBC
  • JPA/Hibernate
  • HBase
  • Cassandra
  • MongoDB

JEE & Probes (JEE 和探针)

它为以下内容提供探针:

  • JDBC
  • JPA/Hibernate
  • Servlet
  • Netty
  • HTTP 请求
  • Web 服务
  • JMS
  • JNDI
  • RMI
  • 文件
  • 套接字
  • 进程

探针显示有关组件的以下信息:

  • 时间线
  • 控制对象
  • 热点
  • 遥测
  • 事件

2) YourKit Java Profiler

YourKit 也是 Java 应用程序广泛使用的 Profiler。它是一个跨平台工具,支持 Linux、Windows、Mac OS、Solaris、FreeBSD 等不同操作系统。

与 JProfile 类似,它还提供了多种功能来可视化线程、垃圾回收、内存泄漏、内存使用情况。它还支持通过 SSH 隧道进行本地和远程分析。

下图显示了 Tomcat 服务器应用程序的内存分析。

Java Profilers

当我们需要分析抛出的异常时,YourKit Profiler 是一个非常方便的工具。我们可以轻松确定抛出了哪些类型的异常以及每种异常发生了多少次。

它提供了有趣的 CPU 分析功能,主要关注代码的特定区域,如线程中的方法和子树。这是 YourKit 工具的一个非常强大的功能,因为它通过其“what-if”功能提供了条件分析。

让我们讨论它的功能。

YourKit 的功能

以下是 YourKit Profiler 的一些关键功能:

出色的 Java Profiler

YourKit 在生产和开发阶段都为 Java 应用程序提供了出色的分析方法。Java 中的 CPU 和内存分析从未如此轻松且同时执行得如此快速。但是,Your Kit 同时提供了这两种功能。这为 Java 开发人员提供了无与伦比的优势。

任务就绪

YourKit 为不同平台上的所有类型的 Java 应用程序和服务器提供分析。它可以本地和远程使用。它可用于检测开发、生产和测试阶段的性能问题。

与 IDE 集成

它为 Eclipse、NetBeans、IntelliJ IDEA 等所有主流 IDE 提供了插件支持,适用于所有类型的 Java 应用程序。此外,它还提供了从分析结果到源代码的智能导航。

远程应用程序分析

它提供了一种简单的方法来分析远程应用程序,类似于本地应用程序。当我们需要的分析远程应用程序时,它会自动配置一切。要开始远程分析,我们需要 SSH 访问。

CPU 分析

它利用许多 JVM 和 OS 功能来访问有关方法和时间的最小开销信息。我们可以将 CPU 分析可视化为调用树或热点列表。它提供了一个“what-if”功能,足够智能,可以在不重新分析应用程序的情况下评估假设的优化所带来的性能提升。

火焰图 (Flame Graphs)

它提供 CPU 火焰图,这是一种可视化应用程序性能的高效方法。我们可以使用火焰图轻松快速地找到性能瓶颈。

数据库查询和 Web 请求

YourKit Profiler 显示慢速 SQL 查询和 Web 请求,以帮助我们找到性能瓶颈。它支持 MongoDB、Cassandra 和 HBase 等所有主要的数据库工具。

内存分析

它提供了一个带有可视化对象堆的内存分析器,并允许在任何方向上遍历对象图。它以方便的形式可视化对象的属性,并定义了一种适当的方式来显示 HashMap 或 String 值的内容。

我们可以看到每个对象保留了多少内存,以及当对象图中的单个引用不存在时会发生什么。这将节省时间并估计预期的内存泄漏修复,而无需更改代码。

比较 CPU 和内存快照

它跟踪通过更改代码会如何影响应用程序的性能。此外,它还会比较性能和内存快照,并以不同格式导出比较报告。

性能检查

它提供了 40 多项全面的检查,以使代码更快、更高效。YourKit Profiler 会自动诊断 Java 应用程序中的典型问题。我们可以轻松找到应用程序中泄漏的 Web 应用、未关闭的 SQL 语句和流、重复的对象。它显示了低效的集合和 I/O 操作。

线程同步问题

它以可视化的形式显示线程活动。我们可以轻松找到被阻塞的线程以及它们被阻塞的原因。

在死锁的情况下,它会立即显示警告和有关被阻塞线程的信息。

使用 YourKit Profiler,我们可以将状态与 HTTP 请求和 SQL 查询结合起来,以获得应用程序处理的请求的完整详细信息。

遥测和性能图表

它提供了一个可定制且用户友好的界面,用于监控 CPU 性能,如内存、GC 活动等。下图是 YourKit 中的性能跟踪图。

Java Profilers

异常分析

它提供出色的异常分析。在大多数情况下,大量的异常抛出很常见,但它会导致隐藏的性能问题。YourKit Profiler 会找到所有抛出异常的位置。

命令行界面

许多精通技术的用户更喜欢使用命令行界面而不是 GUI。YourKit 命令行工具提供了许多无需使用其交互式 UI 即可执行的任务。我们可以通过将其集成到持续集成流程中来自动化性能监控。

3) Visual VM Java Profiler

Visual VM 也是 Java Profilers 列表中的一个重要名称。它为 Java 应用程序提供了简单而强大的分析解决方案。默认情况下,它与 JDK (Java Development Kit) 一起打包。此工具的分析操作依赖于 jconsole、jstat、jstack、jinfo 和 jmap 等其他工具。

下图是 VisualVM Java Profiler 的基本用户界面。

Java Profilers

使用 Java VisualVM 的一个主要优点是我们可以通过开发插件来扩展其功能。此外,我们还可以将这些插件添加到其内置的更新中心。

它提供内存和 CPU 分析,以及 Java 项目的本地和远程分析。我们需要提供凭据才能将其连接到远程应用程序。

VisualVM 不支持 SSH 隧道。

让我们讨论它的功能。

Visual VM 的功能

VisualVM 提供了使用各种其他供应商的解决方案来监控和排查运行在 Java 1.4+ 上的 Java 应用程序。它使用 jvmstat、JMX、Serviceability Agent (SA) 和 Attach API 等各种技术代理。

它为开发人员、系统管理员、质量工程师和最终用户的各种需求提供了完美的解决方案。

Visual VM 的一些关键功能如下:

检测本地和远程 Java 进程

Visual VM 能够检测和列出正在运行的应用程序(本地和远程)。为此,jstatd 必须在远程托管机器上运行。我们也可以通过 JMX 连接手动指定应用程序。

显示进程配置和环境

它显示进程配置和环境详细信息,例如 PID、主类、传递的参数、JDK 主目录、JVM 版本、JVM 标志和系统属性。

监控进程性能和内存

它监控应用程序的性能和内存使用情况。它显示 CPU 使用率、GC 活动、堆和元空间、加载的总类、永久代内存等。

可视化进程线程

它以时间线等视觉形式显示所有正在运行的线程,以及聚合的运行、等待、睡眠、挂起和监视时间。

分析性能和内存使用情况

VisualVM 包含采样和插桩分析器,用于分析性能和内存使用情况。它具有基本的分析功能,用于分析 Java 应用程序的性能和内存管理。

获取和显示线程转储

它可以获取并显示线程转储,以便立即分析目标进程的内部情况。这对于发现分布式死锁很有用。同时获取多个进程的线程转储对于发现分布式死锁很有用。

获取和浏览堆转储

它提供 .hprof 内存快照,该快照会在请求或 OutOfMemory 错误时创建。这有助于揭示低效的堆使用并调试内存泄漏。

分析核心转储

VisualVM 可以读取有关已崩溃 Java 进程及其环境的基本信息。它可以从核心转储中读取,也可以打开并提取其中包含的线程转储和堆转储。

离线分析应用程序

VisualVM Profiler 可以将应用程序配置和运行时环境保存起来,并获取线程转储、堆转储的快照到一个文件中,该文件也可以离线处理。

4) NetBeans Profiler

NetBeans Profiler 是一个出色的 Profiler,提供多种高级分析工具。它集成在 NetBeans IDE 中。它提供 CPU 分析、内存、锁、Sql 查询和线程分析等分析功能。它还支持 JVM 监控,这有助于解决性能和内存问题。

NetBeans Profiler 是一个跨平台工具,支持 Linux、Windows、Mac OS、Solaris 等所有主流操作系统。

Java Profilers

它与 NetBeans IDE 一起打包。它与 VisualVM Profiler 非常相似。如果您想要 IDE 和 Profiler 放在一个地方,它会很有用。

上面提到的所有其他 Profiler 都提供 IDE 插件支持。

5) Java Mission Control

Java Mission Control (JMC) 是一个新的 Java Profiler 和诊断工具。它提供了许多用于基本监控、管理和生产时间分析的功能。它是一个高性能工具,可最大程度地减少性能开销。性能开销一直是 Profiler 的一个问题。它是一个基于 JVM 的工具,可在运行时工作。

JMC 提供 JMX (Java Management Console)、JFR (Java Flight Recorder) 和许多其他插件工具。JMX 用于监控和管理 Java 应用程序,JFR 是一个 Profiler。

Java Mission Control 为 Eclipse 等多个 IDE 提供插件支持。

更多关于 Java Mission Control 的信息。

其他有用的 Profilers

我们已经提到了一些领先的 Java Profiler。除了提到的 Profiler 之外,市场上还有一些其他强大的 Java Profiler。一些有用且广泛使用的 Java Profiler 是 **New Relic** 和 **Prefix**。这些 Profiler 还提供各种分析功能,如 CPU 分析、内存分析、垃圾收集器等。然而,与讨论的 Profiler 相比,这些 Profiler 的用户较少,但它们值得在此文章中提及。一些用户发现这些 Profiler 比一些领先的 Profiler 更有用。

例如,Prefix 是一个出色的分析工具。它支持 Java 应用程序和其他 Web 应用程序。

结论

在本文中,我们讨论了领先的 Java Profiler,我们看到了每个 Profiler 独特的优点以及是什么使它们成为潜在的 Java Profiler。

市场上还有许多其他 Java Profiler,具有一些独特的功能。因此,哪个 Profiler 对您的项目更有用完全取决于您的需求。