JProfiler 15.0 新功能特性

探索 JProfiler 15.0 引入的众多令人瞩目的新功能,包括 Apache Kafka 探针、Visual Studio Code 集成、增强的 SSH 连接支持、MBean 快照功能等,为您的 Java 应用性能分析带来全新体验。

🚀
Apache Kafka 探针支持

新增了 Apache Kafka 探针功能,这些探针可以测量各种类型的数据,帮助您识别瓶颈、优化配置并维护数据流基础设施的健康状态。

为了分别处理客户端和服务器,提供了独立的 Kafka 消费者和 Kafka 生产者探针。"Kafka 生产者"探针分析您发布的事件。

处理多种问题的起点是"热点"视图,您可以在其中打开热点节点查看代码的回溯跟踪。

Kafka 生产者热点视图

"Kafka 消费者"探针测量您处理的事件。对于 Spring Kafka,会记录事件时序。

Kafka 消费者热点视图

单个事件可以在"事件"视图中进行分析,其中还显示事件类型、线程名称、分区、键和值大小的值。

Kafka 探针贡献了多个遥测数据,如"事件计数"和"平均监听器执行时间",这些也可以添加到主"遥测"视图部分中。

Kafka 消费者遥测数据

两个探针都为命名热点和事件提供了相同的灵活性。默认情况下,热点以消息主题命名。您可以使用脚本通过 JProfiler 提供的 API 自己构建热点的字符串。命名热点很重要,因为它决定了热点视图中的分组。

可选地,您可以使用不同的脚本来命名"事件"视图中的单个事件。这不会影响热点分组,是为调试提供更多详细信息的一种方式。

Kafka 命名脚本

记录任一探针的事件会在"CPU 视图部分"的常规调用树视图中添加数据。对于"Kafka 生产者"探针,会在调用树中插入超链接,用于在探针的调用树视图中显示相关的调用堆栈。

Kafka 调用树链接

Kafka 消费者探针为 Spring 事件监听器拆分调用树,因此您可以分别查看不同类型消息的子树。分组是通过配置的"热点"命名完成的。

Kafka 调用树拆分

💻
Visual Studio Code IDE 集成

新增了 Visual Studio Code 的 IDE 集成。它在 Visual Studio Marketplace 中可用,与本地安装的 JProfiler 配合使用。

如果 VS Code 插件无法自动找到 JProfiler 安装,它会在您第一次启动分析会话时要求您定位它。

Visual Studio Marketplace

扩展添加了两个操作:使用"使用 JProfiler 启用分析"可以切换分析模式,以便所有调试和运行操作都将为 Java 启动配置开始分析。使用"使用 JProfiler 附加到正在运行的 JVM"可以使用本地或远程 JVM 的附加模式功能,并获得到 VS Code 的源代码导航。

VS Code 操作

根据 vscode-gradle 插件的拉取请求状态,"使用 JProfiler 启用分析"操作也支持分析 Gradle 任务。

JProfiler 插件只有几个设置,特别是 JProfiler 可执行文件的位置和是否为新分析会话打开新窗口的设置。

VS Code 设置

所有其他分析设置都由 JProfiler 处理并按项目存储。当您启动分析会话时,会话启动对话框让您有机会在一个地方查看和修改所有设置。

在分析单元测试时,JProfiler 会在 JVM 退出时自动建议保存并立即打开快照。

VS Code 会话启动

在使用 JProfiler UI 时切换到 VS Code 可以通过"激活 IDE"操作(F11)无缝实现。

VS Code 激活

要显示选定类或方法的源代码,请使用在 JProfiler 中随处可见的"显示源代码"操作。VS Code UI 将被带到前台,并显示相关的源代码。

VS Code 显示源代码

JProfiler VS Code 插件提供的另一个有用功能是,您可以从 VS Code 内部打开 JProfiler、HPROF 和 PHD 快照,以获得从 JProfiler UI 到 VS Code 的源代码导航。

VS Code 打开快照

🔐
SSH 连接功能增强

新增了通过 OpenSSH 的替代 SSH 模式。这对于能够在所有类型的远程机器上分析 JVM 而无需任何配置非常重要。

JProfiler 附带了一个内置的 SSH 客户端,用于支持密码和公钥身份验证的 SSH 连接。为了支持其他身份验证类型和复杂的网络拓扑,添加了一个新的 SSH 隧道类型,它使用您的本地 OpenSSH 安装。

OpenSSH 隧道模式

例如,如果您想通过 AWS 会话管理器连接到 EC2 实例,内置的 SSH 客户端不起作用,因为它无法通过任意代理进行隧道传输。在 AWS 文档中,您会得到一个选项列表,您可以将其添加到 OpenSSH 配置文件或直接在命令行上,这两种方式都适用于 JProfiler 中的新 OpenSSH 模式。这涉及一个 ProxyCommand 选项,它通过 aws 可执行文件隧道连接。在下面的屏幕截图中,"SSH 选项"文本字段包含这些参数。

OpenSSH 配置

OpenSSH 模式唯一需要的输入是主机名。

如果您使用 OpenSSH 配置文件来定义完全配置的 SSH 服务器,您可以使用"主机"文本字段旁边的"选择"按钮轻松选择它们。

OpenSSH 选择

为禁用端口转发的 SSH 主机添加了替代的 netcat SSH 模式。

许多安全加固的生产系统禁用 SSH 端口转发。在这些情况下,JProfiler 的早期版本无法通过此类机器建立 SSH 隧道。虽然 SSH 端口转发由于其稳定性和更好的错误报告仍然是 SSH 连接的首选选项,但 JProfiler 15 添加了一个"netcat 模式",可以选择性地启用以解决此问题。

SSH netcat 模式

当连接失败的方式可能归咎于禁用的端口转发时,JProfiler 建议切换到 netcat 模式。

SSH netcat 错误

📸
MBean 快照功能

JProfiler 现在可以拍摄 MBean 快照。如果您保存 JProfiler 快照,无论是从 UI 还是在离线分析期间,这都特别有用。MBean 快照使您能够在 JProfiler 未附加到实时 JVM 时使用 MBean 浏览器。

在实时模式下,工具栏中的"MBean 快照"操作会创建一个新快照,然后在视图选择器中显示。您可以拍摄多个快照并在它们之间切换。

MBean 快照操作

MBean 快照可以分配在视图选择器中显示的标签。不需要的 MBean 快照也可以再次删除。

MBean 快照编辑

当您拍摄 MBean 快照时,会在所有具有时间轴的视图中添加书签。

MBean 快照书签

如果您为显示的 MBean 设置过滤器,只有显示的子树将包含在快照中。

MBean 快照过滤器

在 MBean 快照触发器操作中,您也可以设置标签以及包含的 MBean 的过滤器。

MBean 快照触发器

🗂️
多重"所有对象"转储

您现在可以拍摄多个"所有对象"转储。

"所有对象"视图现在有一个操作来拍摄堆上所有对象的类直方图快照。当选择两个转储时,视图中会显示差异。

所有对象转储操作

转储选择器上方的工具栏提供了标记和删除选定转储的操作。

所有对象转储编辑

添加了一个触发器操作来以编程方式拍摄所有对象转储,无论是在实时模式还是在离线分析期间。

所有对象转储触发器

相关地,现在也可以在线程转储视图中标记转储。这也可以通过触发器操作和控制器 API 完成。

线程转储标签

🌳
调用树快照功能

您现在可以制作 CPU 部分中"调用树"视图的快照。

为此,在调用树分析下拉菜单中添加了"调用树快照"操作。

调用树快照操作

它在主调用树视图下方创建一个新的调用树分析视图,显示选定根的静态副本,如果没有选择节点,则显示整个调用树。所有其他视图参数(如线程状态或聚合级别)在调用树快照中都是固定的。

与其他调用树分析不同,调用树快照保存到 JProfiler 快照中,因为它们包含单独的数据。

使用此工具,您可以管理不同的调用树记录,而无需求助于保存必须在不同 JProfiler 窗口中打开的完整快照。相反,您可以保持在同一个实时会话中,并保留不同的记录数据集。

调用树快照视图

在调用树快照视图中,除了常规的调用树分析类型外,还提供了"计算热点"分析操作。

调用树快照热点操作

生成的热点视图作为调用树快照视图的子项添加,并显示父视图中数据的静态热点。热点计算选项在这里仍然是可调整的。

调用树快照热点视图

调用树分析功能改进

调用树分析已得到改进。

您现在可以重命名调用树分析。使用固定按钮使其永久化后,将出现一个重命名按钮,用于更改视图选择器中分析的名称。

调用树分析重命名

此外,"重新加载分析"按钮会回到顶级祖先视图,并为新数据重新计算所有祖先视图和所有后代视图。在下面的示例中,实时调用树中的当前数据将用于更新标记为"第一次运行"的调用树视图,然后是标记为"重新加载"和"渲染"的火焰图视图。

调用树分析重新加载

🔍
堆遍历器转储数据脚本

添加了转储数据上的堆遍历器过滤器和分组脚本。

以前,只有实时对象上的过滤器和分组脚本可用,这对快照不起作用。此外,更改数据和对象的垃圾收集可能需要对转储数据而不是实时数据进行操作。

在堆遍历器的引用视图中,"应用过滤器"下拉菜单包含一个新操作,通过在转储数据上运行脚本来过滤对象。

转储脚本操作

在脚本编辑器中,来自 com.jprofiler.api.agent.heap API 的对象作为参数传递,脚本的布尔返回值决定对象是否包含在新对象集中。

一般来说,参数的类型是 com.jprofiler.api.agent.heap.HeapObject,但如果当前对象集允许,可以缩小到子类型。在下面的屏幕截图中,当前对象集只包含 java.util.HashMap$Node 实例,因此参数的类型是 com.jprofiler.api.agent.heap.Instance,它提供对字段值的访问。

转储脚本过滤器脚本编辑器

脚本选择其值为大小为 12 的 java.awt.Font 的 java.util.HashMap$Node 实例。

转储脚本引用

除了引用视图中的过滤器脚本外,JProfiler 还提供了一个检查来过滤当前对象集中的所有对象,以及一个根据脚本的字符串返回值对所有对象进行分组的检查。

转储脚本检查

在下面的"转储数据上的自定义分组"脚本中,所有常规实例都按它们引用的字符串数量进行分组。如果传递的对象不是常规实例或者它不引用任何字符串,脚本返回 null,对象不被包含。

转储脚本分组脚本

对于其他类型的分组,在计算检查后,顶部会显示一个分组选择器。当您选择一个组行时,当前堆遍历器视图将只显示该组中包含的实例。

转储脚本分组显示

👁️
视图数据可见性增强

JProfiler 15 使查看哪些视图包含数据变得更容易。

对于快照,所有没有记录数据的视图现在在视图选择器中显示为禁用状态。

视图选择器禁用

使用新的"下一个启用视图"和"上一个启用视图"操作,您可以快速浏览所有相关视图。

启用视图操作

对于实时会话,显示记录数据的视图现在在视图名称前面有一个特殊标记。

实时数据指示器

🌍
国际化语言支持

新增了日语本地化支持。こんにちは、日本!

UI 以及文档已完全本地化为日语。语言可以在常规设置中更改,并将由安装程序自动检测。

日语本地化

新增了韩语本地化支持。안녕하세요, 한국!

UI 以及文档已完全本地化为韩语。语言可以在常规设置中更改,并将由安装程序自动检测。

韩语本地化

🧵
线程 ID 显示功能

线程现在显示其线程 ID。

在 JProfiler 的所有视图中,线程现在显示其线程 ID 以及线程名称。这对于调试具有相同名称的多个线程特别有用。

线程 ID 显示

线程 ID 在线程选择器、调用树视图、线程转储以及所有其他显示线程信息的地方都可见。

🔄
远程分析代理下载失败处理流程改进

改进了远程分析代理下载失败时的处理流程。

当远程分析代理下载失败时,JProfiler 现在提供更清晰的错误信息和解决方案建议,帮助用户快速解决连接问题。

远程分析代理下载失败处理

新的错误处理机制包括自动重试、备用下载源以及详细的故障排除指南,确保用户能够顺利建立远程分析连接。

正在加载...
已显示所有功能特性