适用于 Azure Monitor Application Insights 的 Java 探查器
备注
从 3.4.0 开始,Java 探查器功能为预览版。
Application Insights Java 探查器提供的系统适用于:
- 从 Java 虚拟机 (JVM) 按需生成 JDK Flight Recorder (JFR) 配置文件。
- 满足某些触发器条件(例如 CPU 或内存突破已配置的阈值)时,会自动从 JVM 生成 JFR 配置文件。
概述
Application Insights Java 探查器使用 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.InitialEnvironmentVariable
- jdk.SystemProcess
但是,你应查看所有已启用的标志,以确保配置文件不包含敏感数据。
请参阅配置配置文件内容,了解如何设置自定义探查器配置。
先决条件
- 使用 Java Flight Recorder (JFR) 功能的 JVM
- Java 8 更新 262+
- Java 11+
警告
不支持 OpenJ9 JVM
使用情况
触发器
有关各种可用触发器的更详细说明,请参阅探查器概述。
ApplicationInsights Java 代理会监视 CPU、内存和请求持续时间,例如业务事务。 如果它违反了配置的阈值,则会触发配置文件。
立即探查
探查器用户界面(参见探查器设置)中存在一个“立即探查”按钮。 选择此按钮会立即在所有附加到 Application Insights 实例的代理中请求分析。 默认分析持续时间为两分钟。 可以通过替代 periodicRecordingDurationSeconds
来更改它(请参阅配置文件)。
警告
现在,调用配置文件将启用探查器功能,并且 Application Insights 将应用默认的 CPU 和内存 SLA 触发器。 当应用程序违反这些 SLA 时,Application Insights 将收集 Java 配置文件。 如果希望稍后禁用分析,可以在“安装”中显示的触发器菜单中执行此操作。
CPU
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 探查器不支持“采样”触发器。 配置它将不起作用。
完成这些步骤后,代理将监视进程的资源使用情况,并在超出阈值时触发探查。 触发并完成探查后,可以从“性能”>“探查器”部分中的 Application Insights 实例查看它。 可以从该屏幕下载配置文件,下载后,可以在所选工具(例如 JDK Mission Control [JMC])中打开 JFR 记录文件并进行分析。
配置
探查器触发设置(如阈值和分析周期)的配置在“性能、探查器、触发器”UI 下的 ApplicationInsights 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
。
常见问题解答
Azure Monitor Application Insights Java 分析是什么?
Azure Monitor Application Insights Java 探查器通过 Java Flight Recorder (JFR) 来使用自定义配置对应用程序进行探查。
什么是 Java 飞行记录器 (JFR)?
Java 飞行记录器 (JFR) 是一个工具,用于收集正在运行的 Java 应用程序的分析数据。 JFR 集成到 Java 虚拟机 (JVM) 中,用于排查性能问题。 详细了解 Java SE JFR 运行时。
启用 App Insights Java 分析对价格和/或许可费用有什么影响?
Java 分析是 Application Insights 的免费功能。 Azure Monitor Application Insights 定价基于引入成本。
收集哪些 Java 分析信息?
JFR 收集的分析数据包括:方法和执行分析数据、垃圾回收数据和锁配置文件。
如何使用 App Insights Java 分析并将数据可视化?
可以使用首选工具(例如 Java Mission Control (JMC))查看和分析 JFR 记录内容。
App Insights Java 分析是否提供性能诊断和修复建议?
“性能诊断和建议”是一项新功能,即将以 Application Insights Java 诊断的形式提供。 可以在注册后预览此功能。 可以使用 Java Mission Control (JMC) 查看 JFR 记录内容。
App Insights 中的按需 Java 分析和自动 Java 分析有何区别?
按需分析是用户实时触发的分析,而自动分析是与预配置的触发器一起使用的分析。
对于按需分析选项,请使用立即探查。 通过“立即探查”,将会立即分析附加到 Application Insights 实例的所有代理。
如果突破了资源阈值,则会触发自动分析。
可以配置哪些 Java 分析触发器?
Application Insights Java 代理目前支持监视 CPU 和内存消耗情况。 CPU 阈值配置为计算机上所有可用核心的百分比。 内存百分比是当前的老年代内存区域 (OldGen) 相对于区域的最大可能大小的占用率。
启用 Java 分析所需满足的先决条件是什么?
是否可以将 Java 分析用于微服务应用程序?
是的,可以使用 JFR 来探查运行微服务的 JVM。