本文首发于公众号:javaaduhtml
构建高性能的Java应用过程当中,必然会遇到各类各样的问题,像CPU飙高、内存泄漏、应用奔溃,以及其余疑难杂症,这时可使用Serviceability Agent(SA)。SA是JDK提供的一个强大的调试工具集,适用于语言层和虚拟机层,支持调试运行着的Java进程、core文件和虚拟机crash以后的dump文件。java
SA的优势:能够呈现出类对象、可以识别出Java堆、堆边界、堆内对象、载入的类描述、栈内存、线程状态等信息。git
首先,我使用的操做系统版本是:macOS 10.12.6进。SA提供了两个调试工具:图形化的调试工具(HSDB)和命令行工具(CLHSDB)。这里咱们演示下如何在Mac下启动SA HSDB。github
单击左上角的File按钮能够看到:下拉框里指出了SA HSDB的三种使用模式:面试
这里我以本身维护的一个Java应用为例,演示了SA HSDB最重要的一些功能。我在本地启动了该服务,使用jps -l
命令能够看到该服务的PID是51926,我使用第一种调试模式。后端
SA是快照调试器,所以,当在上图中点击OK的时候,account的Java进程会被暂停,直到咱们断开对该进程的调试,而SA HSDB显示的则是SA刚刚连接上account进程那个时间点的进程快照,入下图所示。浏览器
左侧的下拉列表主要是一些经常使用的工具,分别介绍以下【其余功能暂时不经常使用,能够遇到问题了再研究】:服务器
类浏览器(Class Browser):能够查看account的Java进程中载入的类;遇到OOM异常时,可使用这个工具分析有哪些类是不须要载入的,固然,也能够分析但愿载入可是没载入的状况;jvm
死锁检测(Deadlock Detection):检测Java代码层面的死锁,若是线程中存在死锁,则会显示线程死锁的信息和他们等待的锁;工具
对象检视器(Interceptor):能够查看Java线程对象的基本信息,也能够查看虚拟机内部的C++结构体信息;
对象直方图(Object Histogram):能够查看当前堆内存中对象的直方图,该工具在排查内存泄漏和OOM类问题的时候很是有效
右侧的小窗口上面有四个图表,是一些快捷方式;分别介绍以下:
进程检视器:给出线程对象的VM中间表示形式(即开发者能够看懂的格式)
栈内存:显示选中进程的栈内存数据
栈调用路径:显示线程的调用路径,能够看到方法名和地址,并能超链到方法的详细信息
线程的基本信息:包括线程状态、线程ID等等
本号专一于后端技术、JVM问题排查和优化、Java面试题、我的成长和自我管理等主题,为读者提供一线开发者的工做和成长经验,期待你能在这里有所收获。