JVM Serviceability

目录

JVM Serviceability#

在 Java/JVM 术语里,Serviceability 是指 HotSpot 虚拟机包含的几种技术,它们使另一个外部 Java 进程可以观察运行了 Serviceability 组件的 JVM 的行为。这些 Serviceability 技术最少包括:

  • The Serviceability Agent(SA). Serviceability Agent(SA) 原是 HotSpot 原码库中的 Sun 私有组件,由 HotSpot 工程师开发,用于协助调试 HotSpot OpenJDK。他们随后意识到 SA 可用于为最终用户制作 serviceability tools ,因为它可以在运行中的进程以及 Core Dump 文件中检视 Java 对象以及 HotSpot 数据结构。

  • jvmstat performance counters. HotSpot 维护多个性能计数器(counter),这些计数器通过 Sun 私有共享内存机制向外部进程公开。这些计数器有时称为 perfdata。

  • The Java Virtual Machine Tool Interface (JVM TI). 这是一个标准 C 接口,是 JSR 163 - JavaTM 平台分析架构 JVM TI 的参考实现,由 HotSpot 实现,允许 native code “agent” 检视和修改 JVM 的状态。

  • Dynamic Attach. 这是 Sun 的私有机制,允许外部进程在 HotSpot 中启动一个线程,然后该线程用于在该 HotSpot 中启动 agent,并将有关 HotSpot 状态的信息发送回外部进程。

下表包含有关每种技术的更多信息的链接,显示了这些技术在 HotSpot 源码库中的位置,并包含有关 J2SE 源码库中使用这些技术的信息的链接。

技术

源码库中的位置

在 J2SE 中的应用(依赖于这个技术的模块)

JVM TI- Java Virtual Machine Tools Interface

hotspot/src/share/vm/prims/jvmtiGen.java
hotspot/src/share/vm/prims/jvmtiGen.java
hotspot/src/share/vm/prims/jvmti.xml
hotspot/src/share/vm/prims/jvmti*
build/…/generated/jvmtifiles/jvmtiEnter.cpp
build/…/generated/jvmtifiles/jvmtiEnterTrace.cpp
build/…/generated/jvmtifiles/jvmtiEnv.hpp
build/…/generated/jvmtifiles/jvmtiEnvRecommended.cpp build/…/generated/jvmtifiles/jvmtiEnvStub.cpp
build/…/generated/jvmtifiles/jvmti.h     (copied to j2se/src/share/javavm/export/jvmti.h)

JDWP Agent

Monitoring and Management

hotspot/src/share/vm/services/ (most but not all)

Dynamic attach mechanism

src/share/vm/services/attachListener.* src/os/linux/vm/attachListener_linux.cpp src/os/solaris/vm/attachListener_solaris.cpp src/os/win32/vm/attachListener_win32.cpp

Module jdk.attach - Defines the attach API

Jvmstat Performance Counters

src/share/vm/prims/perf.cpp src/share/runtime/perfMemory.cpp src/share/runtime/perfData.cpp src/share/runtime/statSampler.cpp src/share/vm/services/*Service.cpp src/os/solaris/vm/perfMemory_solaris.cpp src/os/linux/vm/perfMemory_linux.cpp src/os/win32/vm/perfMemory_win32.cpp

Serviceability Agent

hotspot/agent/ hotspot/src/share/vm/runtime/vmStructs.hpp hotspot/src/share/vm/runtime/vmStructs.cpp hotspot/cpu/cpu/vm/vmstructs_cpu.hpp hotspot/os_cpu/os-cpu/vm/vmstructs_os-cpu.hpp

Usenix Serviceability Agent paper

图: JVM Serviceability Tech Stack

图: JVM Serviceability Tech Stack#

用 Draw.io 打开

参考#