怎么解析Java虚拟机中的ServiceabilityAgent

这篇文章给大家介绍怎么解析Java虚拟机中的Serviceability Agent,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

目前累计服务客户近千家,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供成都网站建设、做网站、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。成都创新互联公司始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。

我们在问题的分析诊断过程中,DebuggingTroubleshooting工具起了很大的作用,有一个称手的工具,能节省大量的精力,快速解决原本需要耗费许久的工作。但比分析应用更底层的,Low Level 到 JVM 这一层级的工具却比较少。

比如有些时候,你在分析一个应用问题时,想要了解应用当前内存结构,加载类的内容,线程的 Stack Memory,死锁分析,存活对象统计和查询等等。

以上这些,用哪款工具比较合适呢?这些比较低层的分析,只能依靠 JVM 的支持,才能正确的分析。好在官方提供了这样一款工具。

这就是我们本次要提到的工具,或者准确来说是个工具集,但提供给我们使用时,类似于一站式的感觉。在一个工具里完成大量的需求,它是 Serviceability Agent,更多时候被称为 SA。

什么是SA?

The Serviceability Agent is a Sun private component in the HotSpot repository that was developed by HotSpot engineers to assist in debugging HotSpot. They then realized that SA could be used to craft serviceability tools for end users since it can expose Java objects as well as HotSpot data structures both in running processes and in core files.

概括来讲,这是Sun (Oracle)公司提供的一个用于分析HotSpot运行时和Core文件中数据的工具。可以 attach 到Java 进程或分析 Core文件中的数据,了解加载的 class,是一个包含大量 Java API 和工具的工具集。

而且,SA 在 attatch到 进程之后,会暂停当前进程的执行,拿到的是进程的一个 snapshot。当前进程会在 SA 断开后继续执行。

怎样使用

SA 在JDK中是以 Jar 文件的形式提供的,位于JAVA_HOME/lib/sa-jdi.jar。和一般的 Jar 文件执行一样。SA提供了两种使用方式

  •  GUI 方式的 HSDB 

  •  命令行的 CLIHSDB

例如我们使用GUI时,切换到该目录下,执行如下命令:

java -cp sa-jdi.jar sun.jvm.hotspot.HSDB

选择 File 菜单下的 Attach  to HotSpot Process,输入Java进程的pid即可。

此时,会看到进程的线程都在列表里展示了。

怎么解析Java虚拟机中的Serviceability Agent

 顶部的一系列图标,可以查看选定线程的信息,例如能进行 Inspect,查看VM层面 线程对象的结构,选择 Stack Memory,查看 包含地址信息的stack 的数据。

怎么解析Java虚拟机中的Serviceability Agent

后面是要以通过 Jstack拿到的Stack Trace。

在 Tools 菜单下,有一系列的工具。

怎么解析Java虚拟机中的Serviceability Agent

我们选几个来简要介绍下。

Class Browser

通过这个,可以看到所有 JVM 加载的 class。对应类内的方法等信息自然也都能查到。它同时还支持把一个 class dump 到本地。这对于一些只能通过 core文件来分析问题的情况,可以拿到 class 来分析。

操作也简单,找到对应的class, 点击create class 就OK了, class 生成到lib目录下。

怎么解析Java虚拟机中的Serviceability Agent

Find Object by Query

这个功能和 SQL类似,在文本框中输入要查询的对象

例如这个:

select t from java.lang.Thread t 

怎么解析Java虚拟机中的Serviceability Agent

Code Viewer

对于一个类内的方法,有些时候需要分析方法的 JVM 指令或者 JIT 编译后的广场,可以使用这个工具,在输入 Class或者 Method的地址后,就会看到其对应的内容

怎么解析Java虚拟机中的Serviceability Agent

Find Value in Heap

该工具可以在类似于 GC 问题时,通过指定对象的地址查看对象是否还存在于Heap中。

怎么解析Java虚拟机中的Serviceability Agent

通过SA,我们不仅能分析到 Java 应用层面的东西,而且一些JVM 层面的,甚至 JIT 编译的方法, GC 是否回收对象,都能够很容易的了解到,仿佛一个JVM 的显微镜,在SA的协助下,问题都无处遁形。

关于怎么解析Java虚拟机中的Serviceability Agent就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


标题名称:怎么解析Java虚拟机中的ServiceabilityAgent
分享URL:http://myzitong.com/article/gchgpp.html