监控 Java 虚拟机(JVM)

您可以使用 Instana 全面监控 Java 虚拟机 (JVM),找出瓶颈并优化性能。 要监控 JVM,请安装 Instana 主机代理。 安装代理后,Instana Java 传感器会自动激活,收集实时指标和跟踪数据,您可以在 Instana UI 中查看这些数据。

Java 传感器为支持的技术提供自动代码检测,对 JVM 实例进行零配置健康监测,并对所有系统的请求进行端到端跟踪。

支持的信息

Java 传感器支持以下语言、操作系统和运行时:

支持的语言

传感器支持以下语言

  • Clojure
  • Java
  • Kotlin
  • Scala

受支持的操作系统

Java 传感器支持符合主机代理要求的操作系统,可在每个主机代理的 "支持的操作系统 "部分(如 Unix 的 "支持的操作系统")中查看。

支持的 Java 发行版和运行时

有关支持的 Java 发行版和运行时的信息,请参阅系统要求

支持的跟踪框架和库

Java 传感器利用多个框架和库进行跟踪。 更多信息,请参阅 Instrumented frameworks and libraries

系统需求

安装 Instana 代理之前,请确保满足必要的系统要求。 更多信息,请参阅系统要求

安装 Instana 代理程序

要监控 JVM,必须安装 Instana 主机代理。 更多信息,请参阅安装主机代理。 代理会自动部署、配置和安装 Java 传感器。 为确保您的 Java 应用程序被检测到,请确保您的 JVM 发行版受支持。

不要尝试同时使用多个供应商的代理。 您可能会遇到无法预测的结果,从而导致应用程序失败。 更多信息,请参阅不兼容的代理

将 JVM 排除在监控之外

要避免将 Instana 代理附加到 JVM,可以在 JVM 环境中将 INSTANA_IGNORE环境变量为 true

可选:配置传感器

安装 Instana 代理后,Java 传感器将自动安装和配置。 虽然不需要对开箱即用的指标和分布式跟踪进行任何配置,但可以对传感器的各个组件进行配置。

有关配置传感器的详细信息,请参阅 Java 配置

Java 传感器配置完成后,会自动开始从 JVM 收集指标。 您可以在 Instana UI 中查看这些指标。 Java 传感器还支持 Instana 的其他功能,如自动跟踪、自定义跟踪和自动剖析。

指标收集

Java 传感器监控 JVM 实例并从中收集以下指标:

要查看这些指标,请完成以下步骤:

  1. 在 Instana UI 的侧栏中,选择 " 基础设施 "。
  2. 单击特定受监控主机。

JVM 面板显示为 JVM 实例收集的所有指标。

配置数据

下表列出了从 JVM 实例收集的配置数据:

配置 描述
Java 版本 Java 版本。
Java 运行时 Java 运行时环境 (JRE)。
堆最大值 可用于 JVM 的最大堆大小。
类路径 在 JVM 中设置的类路径参数。

绩效指标

下表列出了从 JVM 实例收集的性能指标数据:

绩效指标 描述 数据点
已使用的内存 JVM 使用的内存总量。 将显示当前测量的 KPI 值。 字节数从 java.lang.Runtime#totalMemory 收集。
线程 处于不同状态的线程数: new, runnable, timed-waiting, waiting, 或 blocked 。 这些值将在选定时间段内显示在图形上。 - 当前线程 ID 从 java.lang.management.ThreadMXBean#getAllThreadIds 收集。
- 线程状态从 ThreadMXBean#getThreadInfo 收集。
堆内存 可用于 JVM 的最大堆大小。 - 字节数计算公式为 java.lang.Runtime#totalMemory - java.lang.Runtime#freeMemory
- 图表中显示的最大堆大小通过解析 -Xmx 命令行参数确定,或从 java.lang.Runtime#maxMemory 收集。
- 已用堆内存占总堆内存的百分比。
内存池 在选定的时间段内,堆池和非堆池的内存池使用情况会显示在图表上。 - 池信息从 ManagementFactory#getMemoryPoolMXBeans 收集。
- 图形值从每个池 java.lang.management.MemoryUsage 收集。
- 最大值从 getMax 收集,初始值从 getInit 收集,当前值从 getUsage 收集。
垃圾回收 在所选时间段内,垃圾回收激活和运行时值显示在图形上。 - 垃圾收集信息是从 ManagementFactory#getGarbageCollectorMXBeans 收集的。
- 图形值是从每个收集器 java.lang.management.GarbageCollectorMXBean 收集的。
- 垃圾收集运行时间从 getCollectionTime 收集,根据 Javadoc,它是累计垃圾收集的大致耗时(以毫秒为单位)。
- 调用次数从 getCollectionCount 收集。
- getCollectionTimegetCollectionCount 的值都是 1 秒内计算出的差值。
暂挂 在选定时间段内显示在图表上的应用程序执行延迟。 根据应用程序内的 Instana 测量线程计算。

健康签名

每个传感器都有一个经过精心策划的健康特征知识库,可根据传入的指标对其进行持续评估。 这些健康签名用于提出取决于用户影响的问题或事件。

内置事件根据实体上失败的运行状况特征符来触发问题或事件,而定制事件根据任何实体的单个指标的阈值来触发问题或事件。

有关 Java 传感器内置事件的更多信息,请参阅内置事件参考

定制指标

Instana 支持一些常见的 Java 度量库。 如果使用以下库,就可以手动检测应用程序代码以收集自定义指标:

更多信息,请参阅自定义跟踪

其他指标

除了配置、性能和自定义指标外,Java 传感器还收集其他指标,如实时线程转储和堆转储。

现场线程转储

要查看 JVM 的实时线程转储,请单击获取线程转储

堆转储

要为 JVM 创建堆转储,请单击获取堆转储。 要存储堆转储,请指明 JVM 的本地位置。

跟踪 Java 应用程序

Instana 中的 Java 传感器使用以下方法跟踪 Java 应用程序:

  • Instana AutoTrace :自动跟踪 Java 应用程序,无需手动配置或更改代码。
  • 自定义跟踪 :手动检测 Java 应用程序代码的特定部分,以捕获自定义指标并获得更深入的见解。
  • Instana AutoProfile :自动剖析 Java 应用程序,提供有关性能、CPU 使用率、内存分配和其他系统资源的详细信息。

Instana AutoTrace

默认情况下,Java 传感器会监控所有请求,并自动为每个请求创建分布式跟踪。 这种分布式跟踪包括跨主机和跨语言跟踪。 有关更多信息,请参阅 Instana AutoTrace™

您可以在 Instana UI 中查看这些轨迹。 更多信息,请参阅分析跟踪和调用

正在记录

您只能查看 WARN 及以后级别的日志。

当使用 Log4j、 Log4j2 或 Logback 来更精确地关联日志记录和跟踪时,Instana 会自动用跟踪 ID 填充映射诊断上下文 (MDC)。 MDC 变量名称为 instana.trace.id。 有关在格式字符串中使用日志框架的更多信息,请参阅日志框架文档。

定制跟踪

Java 传感器提供全自动的开箱即用跟踪仪器。 但在某些情况下,您可能更喜欢向 Instana 仪表板发送自定义跟踪。 您可以使用以下方法实施自定义跟踪:

Java 跟踪 SDK

如果您想检测 Instana 尚不支持的框架,或监控自定义应用程序的请求,请使用 Java Trace SDK ,并查看 GitHub repo

在使用 SDK 实施自定义跟踪之前,请参阅跟踪最佳实践

基于配置的 Java 跟踪 SDK

您可能会遇到这样的情况:使用 Java 跟踪 SDK 需要处理源代码或联系能处理源代码的人,但这样做既不可行也不可取。 在这种情况下,请使用基于配置的 Java 跟踪 SDK。 虽然功能不如编程式 Java 跟踪 SDK 丰富,但基于配置的 Java 跟踪 SDK 允许对涵盖许多常见用例的跨度和标记进行声明式配置。

在使用基于配置的 Java 跟踪 SDK 实施自定义跟踪之前,请参阅跟踪最佳实践

Java OpenTracing API

要收集通过 OpenTracing API 描述的跟踪,必须使用 Java OpenTracing。 有关更多信息,请参阅 OpenTracing

在使用 Java OpenTracing API 之前,请禁用自动跟踪 (Instana AutoTrace™ )。 更多信息,请参阅禁用自动仪器

OpenCensus Instana 跟踪输出器

Instana 为使用 Java 编写的应用程序提供 OpenCensus 跟踪导出器。 通过使用 Instana 代理进程作为代理,Instana 可将使用 Census 仪器的应用程序导出的痕迹转发到其后台。

有关详细信息,请参阅 OpenCensus Exporters

如果代理与 Census 在同一主机上使用,则禁用自动跟踪 (Instana AutoTrace™ )。 更多信息,请参阅禁用自动仪器

Instana AutoProfile

在代码级别查找性能热点和瓶颈时,概要文件至关重要。 它们在减少资源消耗和提高性能方面发挥了重要作用。

Instana AutoProfile™ 生成并向 Instana 报告流程配置文件。 与必须手动启动剖析的开发时间剖析器和按需剖析器不同, AutoProfile™ 可自动安排并持续执行适合关键生产环境的剖析。 有关更多信息,请参阅 Instana AutoProfile™ 文档。

更多信息,请参阅 Instana AutoProfile™

不包括 JVM

您可以在 JVM 环境中将 INSTANA_IGNORE环境变量为 true ,以避免 Instana Agent 附加到 JVM。

故障诊断

使用 Instana 可能会遇到一些监控问题。 有关更多信息,请参阅故障诊断