注意
Java 探查器功能从 3.4.0 开始处于预览状态。
Java Profiler 提供了一个可执行以下操作的系统:
- 从 Java 虚拟机 (JVM) 按需生成 JDK Flight Recorder (JFR) 配置文件。
- 满足某些触发器条件(例如 CPU 或内存突破已配置的阈值)时,会自动从 JVM 生成 JFR 配置文件。
Java Profiler 使用 JVM 提供的 JFR 探查器来记录分析数据,允许用户稍后下载 JFR 记录并对其进行分析以确定性能问题的原因。
满足触发器条件时,就可以按需收集此数据。 可用触发器是 CPU 使用率、内存消耗和请求(服务级别协议触发器)的阈值。 请求触发器会监视 OpenTelemetry 生成的时间跨度,并允许用户在这些时间跨度的持续期间配置服务级别协议 (SLA) 要求。
达到阈值后,将收集并上传配置的类型和持续时间的探查。 然后,此性能分析报告就会在关联的 Application Insights 门户 UI 的性能窗格中可见。
警告
默认情况下,JFR 探查器执行“profile-without-env-data”探查。 JFR 文件是 JVM 发出的一系列事件。 “profile-without-env-data”配置类似于 JVM 附带的“profile”配置,但禁用了某些事件,这些事件可能包含敏感的部署信息,例如环境变量、提供给 JVM 的参数以及系统上运行的进程。
不再可用的标志包括:
- jdk.JVMInformation
- jdk.InitialSystemProperty
- jdk.OSInformation
- jdk.初始环境变量
- jdk.SystemProcess
但是,你应查看所有已启用的标志,以确保配置文件不包含敏感数据。
有关设置自定义探查器配置的信息,请参阅配置探查内容。
使用 Java Flight Recorder (JFR) 功能的 JVM
- Java 8 更新 262+
- Java 11+
警告
不支持 OpenJ9 JVM
有关可用的各种触发器的详细说明,请参阅使用适用于 .NET 的 Application Insights Profiler 在 Azure 中探查生产应用程序。
ApplicationInsights Java 代理会监视 CPU、内存和请求持续时间,就像监视业务事务一样。 如果它违反配置的阈值,则会触发探查。
“现在分析”按钮位于分析器用户界面中(请参阅配置适用于 .NET 的 Application Insights 分析器)。 选择此按钮会立即请求探查附加到 Application Insights 实例的所有代理。 默认分析持续时间为两分钟。 可以通过替代 periodicRecordingDurationSeconds
来更改它(请参阅配置文件)。
警告
调用“Profile now”将启用分析器功能,并且 Application Insights 将应用默认的 CPU 和内存 SLA 触发器。 当应用程序违反这些 SLA 时,Application Insights 将收集 Java 配置文件。 如果希望稍后禁用分析,可以在“安装”中显示的触发器菜单中执行此操作。
CPU 阈值是系统上所有可用核心的百分比使用率。
例如,如果八核计算机的一个核心饱和,则可认为 CPU 的百分比使用率为 12.5%。
内存百分比是当前“老年代内存区域”(OldGen) 对该区域的大小上限的占用率。
执行老年代收集后,会评估占用率。 老年代区域的最大大小是其在 Java 虚拟机 (JVM) 堆增长到大小上限时的大小。
例如,假设存在以下场景:
- Java 堆最多可增长到 1024 MB。
- 老年代可以增长到堆的 90%。
- 老年代的大小上限为 922 mb。
- 你的阈值通过用户界面设置为 75%,因此你的阈值为 922 mb 的 75%,即 691 mb。
在此方案中,探查在以下情况下发生:
- 执行完整的垃圾收集
- 收集后,老年代区域占用率超过 691 mb
SLA 触发器基于 OpenTelemetry,如果满足某些条件,则会启动探查。
每个单独的触发器配置的格式如下:
Name
- 触发器的唯一标识符。Filter
- 筛选触发器感兴趣的请求。Aggregation
- 计算违反给定阈值的请求的比率。Threshold
- 用于确定请求违规发生的阈值最小值(以毫秒为单位)。Minimum samples
- 为聚合生成数据而必须收集的最小样本数,此设置是为了防止触发小样本量。Window
- 滚动时间窗口(以毫秒为单位)。
Threshold
- 应用于聚合输出的阈值(百分比)。 如果超出此值,则会启动探查。
例如,以下应用场景会触发探查:当收集了至少 100 个样本时,超过 75% 的针对特定终结点 (/users/.*) 的请求在 60 秒时间段内用时超过 30 毫秒。
以下步骤将指导你在代理上启用分析组件并配置资源限制,以便在突破限制时触发分析。
配置导致收集探查的资源阈值:
警告
Java 不支持右下角的 Profiler 跟踪 按钮。
选择“触发器”
配置所需的 CPU、内存或请求触发器(如果启用),然后选择“应用”。
警告
Java Profiler 不支持“抽样”触发器。 配置它将不起作用。
完成这些步骤后,代理将监视进程的资源使用情况,并在超出阈值时触发分析过程。 触发并完成探查后,可以从“性能”->“探查器”部分的 Application Insights 实例查看探查。 可以从该屏幕下载配置文件,下载后,可以在所选工具(例如 JDK Mission Control [JMC])中打开 JFR 记录文件并进行分析。
Java 探查器触发设置(如阈值和探查期)的配置在 Application Insights UI 中设置,在“性能”>“探查器”>“触发器”下,如安装中所述。
此外,可以使用环境变量和 applicationinsights.json
配置文件配置许多参数。
如果要提供自定义配置文件配置,请更改 memoryTriggeredSettings
和 cpuTriggeredSettings
,以便提供具有所需配置的 .jfc
文件的路径。
可以在 Window->Flight Recording Template Manager
菜单下的 JDK Mission Control (JMC) 用户界面中生成/编辑配置文件,并在此用户界面的 Edit->Advanced
中找到对各个标志的控制。
APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED
:布尔值(默认值:true
)启用/禁用分析功能。 默认情况下,此功能已在代理(从代理 3.4.9 开始)中启用。 但是,即使在代理中启用了此功能,也不会收集探查,除非在门户中启用,如安装中所述。
示例配置:
{
"preview": {
"profiler": {
"enabled": true,
"cpuTriggeredSettings": "profile-without-env-data",
"memoryTriggeredSettings": "profile-without-env-data",
"manualTriggeredSettings": "profile-without-env-data",
"enableRequestTriggering": true,
"periodicRecordingDurationSeconds": 60
}
}
}
memoryTriggeredSettings
:如果请求内存分析,将使用此配置。
此值可以是以下值之一:
profile-without-env-data
(默认值)。 禁用某些敏感事件的探查,有关详细信息,请参阅“警告”部分。profile
。 使用 JFR 附带的profile.jfc
配置。- 文件系统上自定义 jfc 配置文件的路径,例如
/tmp/myconfig.jfc
。
cpuTriggeredSettings
:如果请求 CPU 分析,将使用此配置。
此值可以是以下值之一:
profile-without-env-data
(默认值)。 禁用某些敏感事件的探查,有关详细信息,请参阅“警告”部分。profile
. 使用 JFR 附带的profile.jfc
jfc 配置。- 文件系统上的自定义 jfc 配置文件的路径,例如
/tmp/myconfig.jfc
。
manualTriggeredSettings
:如果请求手动分析,将使用此配置。
此值可以是以下值之一:
profile-without-env-data
(默认值)。 禁用某些敏感事件的探查,有关详细信息,请参阅“警告”部分。profile
. 使用 JFR 附带的profile.jfc
jfc 配置。- 文件系统中通向自定义 jfc 配置文件的路径,例如
/tmp/myconfig.jfc
。
enableRequestTriggering
是否应触发 JFR 分析由请求配置决定。
此值可以是以下值之一:
- 如果违反请求触发器阈值,则会触发
true
探查。 false
(默认值)。 请求配置不会触发分析。
periodicRecordingDurationSeconds
:通过使用“立即探查”按钮启动分析会话时的分析记录持续时间(以秒为单位)。 默认值为 120
。
Java Profiler 使用 Java Flight Recorder (JFR) 并通过自定义配置对应用程序进行分析。
Java 飞行记录器 (JFR) 是一个工具,用于收集正在运行的 Java 应用程序的分析数据。 JFR 集成到 Java 虚拟机 (JVM) 中,用于排查性能问题。 详细了解 Java SE JFR 运行时。
Java 分析是 Application Insights 的免费功能。 Azure Monitor Application Insights 定价基于引入成本。
JFR 收集的探查数据包括:方法和执行探查数据、垃圾收集数据和锁定探查。
可以使用首选工具(例如 Java Mission Control (JMC))查看和分析 JFR 记录内容。
“性能诊断和建议”是一项新功能,即将以 Application Insights Java 诊断的形式提供。 可以在注册后预览此功能。 可以使用 Java Mission Control (JMC) 查看 JFR 记录内容。
按需分析是实时由用户触发的分析设置,而自动分析是通过预先配置的触发器进行的。
对于按需分析选项,请使用立即分析。 Profile Now 会立即分析附加到 Application Insights 实例的所有代理。
资源达到阈值时,会触发自动化分析。
Application Insights Java 代理目前支持监视 CPU 和内存消耗情况。 CPU 阈值配置为计算机上所有可用核心的百分比。 内存是当前“老年代内存区域”(OldGen) 对该区域的大小上限的占用率。
是的,可以使用 JFR 来探查运行微服务的 JVM。