本文首发于微信公众号:javaadu

简单介绍

构建高性能的Java应用过程中,必然会遇到各种各样的问题,像CPU飙高、内存泄漏、应用奔溃,以及其他疑难杂症,这时可以使用Serviceability Agent(SA)。SA是JDK提供的一个强大的调试工具集,适用于语言层和虚拟机层,支持调试运行着的Java进程、core文件和虚拟机crash之后的dump文件。

SA的优点:可以呈现出类对象、能够识别出Java堆、堆边界、堆内对象、载入的类描述、栈内存、线程状态等信息。

安装

首先,我使用的操作系统版本是:macOS 10.12.6进。SA提供了两个调试工具:图形化的调试工具(HSDB)和命令行工具(CLHSDB)。这里我们演示下如何在Mac下启动SA HSDB。

  1. 设置JAVAHOME变量:export JAVAHOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/
  2. SA HSDB的入口在$JAVAHOME/lib/sa-jdi.jar中,main方法在sun.jvm.hotspot.HSDB中,因此使用命令:sudo java -cp $JAVAHOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB,就可以启动HSDB调试器(入下图所示)

使用模式

单击左上角的File按钮可以看到:下拉框里指出了SA HSDB的三种使用模式:

  1. 链接到本地Hotspot进程上;
  2. 链接到core文件;
  3. 连接到远程的服务器进行Debug;

入门示例

这里我以自己维护的一个Java应用为例,演示了SA HSDB最重要的一些功能。我在本地启动了该服务,使用jps -l命令可以看到该服务的PID是51926,我使用第一种调试模式。

SA是快照调试器,因此,当在上图中点击OK的时候,account的Java进程会被暂停,直到我们断开对该进程的调试,而SA HSDB显示的则是SA刚刚链接上account进程那个时间点的进程快照,入下图所示。

常用工具

左侧的下拉列表主要是一些常用的工具,分别介绍如下【其他功能暂时不常用,可以遇到问题了再研究】:

  1. 类浏览器(Class Browser):可以查看account的Java进程中载入的类;遇到OOM异常时,可以使用这个工具分析有哪些类是不需要载入的,当然,也可以分析希望载入但是没载入的情况;

  1. 死锁检测(Deadlock Detection):检测Java代码层面的死锁,如果线程中存在死锁,则会显示线程死锁的信息和他们等待的锁;
  2. 对象检视器(Interceptor):可以查看Java线程对象的基本信息,也可以查看虚拟机内部的C 结构体信息;

  1. 对象直方图(Object Histogram):可以查看当前堆内存中对象的直方图,该工具在排查内存泄漏和OOM类问题的时候非常有效

快捷图标

右侧的小窗口上面有四个图表,是一些快捷方式;分别介绍如下:

  1. 进程检视器:给出线程对象的VM中间表示形式(即开发者可以看懂的格式)
  2. 栈内存:显示选中进程的栈内存数据

  • 左起第1栏是内存地址,请让我提醒一下本文里提到“内存地址”的地方都是指虚拟内存意义上的地址,不是“物理内存地址”,请不要弄混了这俩概念;
  • 第2栏是该地址上存的数据,以字宽为单位,本文例子中我是在macOS上跑64位的JDK8的HotSpot VM,字宽是64位(8字节);
  • 第3栏是对数据的注释,竖线表示范围,横线或斜线连接范围与注释文字
    1. 栈调用路径:显示线程的调用路径,可以看到方法名和地址,并能超链到方法的详细信息
    2. 线程的基本信息:包括线程状态、线程ID等等

SA的其他工具

  1. FinalizerInfo:该工具可用于打印出目标虚拟机所有可销毁对象的详细信息;
  2. HeapDumper:该工具可以用hprof格式转储Java堆的快照信息(类似于jmap命令);
  3. 永生代信息统计(PermStat):该工具用于打印出目标虚拟机中永生代的统计信息;Obje
  4. PMap:该工具用于打印出目标虚拟机进程的内存映射信息;
  5. 对象直方图(Object Histogram):对象直方图不仅可以在HSDB和CLHSDB中使用,还可以单独使用;
  6. OQL:该工具提供了类似脚本语言的命令,可以通过执行结构化对象查询语句,可以像写SQL一样,在Java堆中查找指定的对象;
  7. ClassDump:使用该工具可以导出目标虚拟机进程加载的类。

参考资料

  1. 《Java性能调优指南》
  2. Java ServiceabilityAgent(HSDB)使用和分析
  3. 借HSDB来探索HotSpot VM的运行时数据
  4. Java七武器系列长生剑 -- Java虚拟机的显微镜 Serviceability Agent

JVM问题排查工具:Serviceability-Agent介绍相关推荐

  1. jvm调优 java_opt_Java-100天知识进阶-JVM调优工具-JDK自带工具-知识铺《八》

    原标题:Java-100天知识进阶-JVM调优工具-JDK自带工具-知识铺<八> JVM 监控分析工具 一.JDK 自带工具 1. jconsole JDK/bin 目录下, jconso ...

  2. 这几款 JVM 故障诊断处理工具,你还不会?

    作者 | Silently9527   责编 | 欧阳姝黎 前言 前几天中午正在和同事最近聊股市较好,这几天每天都可以喝点肉汤,心里还是挺高兴的:正在这个时候收到了线上告警邮件和运维同学的消息,&qu ...

  3. jvm调优五:jvm调优工具和调优实战

    jvm调优工具和调优实战 jvm自带常用命令 JPS jps是用于查看有权访问的hotspot虚拟机的进程id. 当未指定hostid时,默认查看本机jvm进程id -l:输出完整jar名称 -v:输 ...

  4. jvm调优工具_JVM性能调优监控工具jps、jstack、jmap、jhat、hprof使用详解

    来自:ITeye博客, 作者:Josh_Persistence 链接:https://www.iteye.com/blog/josh-persistence-2161848 现实企业级Java应用开发 ...

  5. Jvm 系列(七):Jvm 调优-工具篇

    工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题 ...

  6. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  7. JDK14性能管理工具:jstat使用介绍

    文章目录 简介 JStat命令 JStat Output Options class compiler gc gccapacity gcnew gcnewcapacity gcold gcoldcap ...

  8. 4大JVM性能分析工具详解,及内存泄漏分析方案

    谈到性能优化分析一般会涉及到: Java代码层面的,典型的循环嵌套等 还会涉及到Java JVM:内存泄漏溢出等 MySQL数据库优化:分库分表.慢查询.长事务的优化等 阿里P8架构师谈:MySQL慢 ...

  9. mat 内存分析 Linux,JVM内存分析工具MAT使用简介

    # Memory Analyzer使用简介 markdown格式渲染异常请阅读附件. - [Memory Analyzer使用简介](#memory-analyzer使用简介) - [MAT 简介]( ...

最新文章

  1. 加速产业AI化!浪潮提出”元脑“生态计划,要用计算力+生态成就行业AI大脑...
  2. 用mkfs.jffs2 命令制作jffs2镜像文件 (转)
  3. mysql同表字段前4位复制_MySQL不同表之前的字段复制
  4. 带你认识FusionInsight Flink:既能批处理,又能流处理
  5. android 4种动画
  6. iOS开发那些事--nib、xib与故事板的关系
  7. DB2数据库备份和恢复笔记
  8. FishC笔记—26 讲 字典:当索引不好用时2
  9. 蜂巢APP启动优化实践
  10. UCanCode发布跨平台开源组态\ 建模\仿真\工控VX++ 2021
  11. Android免费离线文字转语言+讯飞语记
  12. 验证苹果电子邮件地址服务器出现问题,iPhone之验证您的电子邮件地址问题解决...
  13. Apache Dubbo官网推荐使用建议
  14. Vue 点击事件写法
  15. can t find dynamically referenced class android os systemproperties
  16. chrome新版不支持旺旺 支付宝 插件的解决方法
  17. html把一张图片动态的代码,原神:4张动态图演示168皮肤琴的实机效果,三种玩家可入手...
  18. 欧盟玩具新标准IEC/EN62115
  19. OpenCV Using Python——HSV颜色空间和改进的YCbCr颜色空间中的肤色检测
  20. 10个有用的HTML文件上传技巧

热门文章

  1. PV操作之独木桥问题
  2. Torque 3.0使用指南
  3. 千人规模组织级 DevOps 演进的 9 个实践及技巧
  4. 简单的Android端新闻App的实现
  5. 记账软件APP用哪个,一看就知道
  6. 下载protobuf-cpp-3.3.0.zip
  7. android StaticLayout 完美契合TextView
  8. 农业自动化灌溉控制系统方案
  9. 今日头条移动APP 广告激活数据API对接实践
  10. Android通讯录开发之获取运营商号码段(移动、联通,android选择题题库