Java 七武器系列长生剑:Java 虚拟机的显微镜 Serviceability Agent

来源:互联网 发布:vibe算法改进代码 编辑:程序博客网 时间:2024/05/11 10:48

本文标签:JavaJava虚拟机Serviceability+AgentGoogle

古代,习武之人都会找自己称心如意的兵器,悟空甚至远到龙宫去寻宝。刘关张结义之后马上 DIY 自己称手的兵器。

我们开发人员也是一样,我们在问题的分析诊断过程中, DebuggingTroubleshooting 工具起了很大的作用,有一个称手的工具,能节省大量的精力,快速解决原本需要耗费许久的工作。

当然,已经有大量的工具可以用于问题分析诊断,比如我们前面介绍过的两款:

Java七武器系列霸王枪 -- 线程状态分析 jstack

Java七武器系列孔雀翎-- 问题诊断神器BTrace

但比分析应用更底层的,Low Level 到 JVM 这一层级的工具却比较少。

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

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

这就是我们本次要提到的工具,或者准确来说是个 工具集 ,但提供给我们使用时,类似于一站式的感觉。在一个工具里完成大量的需求,它是 ServiceabilityAgent ,更多时候被称为 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即可。

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

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

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

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


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

Class Browser

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

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


Find Object by Query

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

例如这个:

select t from java.lang.Thread t

Code Viewer

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

Find Value in Heap

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

就像拥有长生剑的白玉京一样,多次在大仗中凯旋。

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

写在最后:FOR Freedom 看看外边的世界,以及IT这一行,少不了去Google查资料,最后,安利一个加速器代理。一枝红杏 加速器,去Google查资料是绝对首选,连接速度快,使用也方便。我买的是99¥一年的,通过这个链接(http://whosmall.com/go/yzhx)注册后输上优惠码wh80,终身85折 ,平摊下来,每月才7块钱,特实惠。

本文标签:JavaJava虚拟机Serviceability+AgentGoogle

转自 SUN'S BLOG - 专注互联网知识,分享互联网精神!

原文地址: Java 七武器系列长生剑:Java 虚拟机的显微镜 Serviceability Agent

相关阅读深入学习Vue.js和 chart.js 来制作漂亮的图表

相关阅读:GIT能做什么、它和SVN在深层次上究竟有什么不同

相关阅读:分享一些对开发者最有用的、用户友好和功能丰富的Google Chrome扩展工具

相关阅读:分享一些实际Android开发过程中很多相见恨晚的工具或网站

相关阅读:我是 G 粉,一直关注 Google,最近 Google 有一些小动作,可能很多人不太了解

相关阅读:机器学习引领认知领域的技术创新,那么SaaS行业会被机器学习如何改变?

相关阅读:VPS 教程系列:Dnsmasq + DNSCrypt + SNI Proxy 顺畅访问 Google 配置教程

相关阅读: 对程序员有用:2017最新能上Google的hosts文件下载及总结网友遇到的各种hosts问题解决方法及配置详解

相关BLOG:SUN’S BLOG- 专注互联网知识,分享互联网精神!去看看:www.whosmall.com

原文地址:http://whosmall.com/?post=376

0 0