本文首发于个人网站:Serviceability Agent介绍
构建高性能的Java应用过程中,必然会遇到各种各样的问题,像CPU飙高、内存泄漏、应用奔溃,以及其他疑难杂症,这时可以使用Serviceability Agent(SA)。SA是JDK提供的一个强大的调试工具集,适用于语言层和虚拟机层,支持调试运行着的Java进程、core文件和虚拟机crash之后的dump文件。
SA的优点:可以呈现出类对象、能够识别出Java堆、堆边界、堆内对象、载入的类描述、栈内存、线程状态等信息。
首先,我使用的操作系统版本是:macOS 10.12.6进。SA提供了两个调试工具:图形化的调试工具(HSDB)和命令行工具(CLHSDB)。这里我们演示下如何在Mac下启动SA HSDB。
2017-12-1421.24.53.png
单击左上角的File按钮可以看到:下拉框里指出了SA HSDB的三种使用模式:
2017-12-1421.24.44.png
这里我以自己维护的一个Java应用为例,演示了SA HSDB最重要的一些功能。我在本地启动了该服务,使用jps -l
命令可以看到该服务的PID是51926,我使用第一种调试模式。
2017-12-1422.10.09.png
SA是快照调试器,因此,当在上图中点击OK的时候,account的Java进程会被暂停,直到我们断开对该进程的调试,而SA HSDB显示的则是SA刚刚链接上account进程那个时间点的进程快照,入下图所示。
2017-12-1422.16.52.png
左侧的下拉列表主要是一些常用的工具,分别介绍如下【其他功能暂时不常用,可以遇到问题了再研究】:
2017-12-1422.48.50.png
2017-12-1422.50.11.png
2017-12-1422.45.11.png
右侧的小窗口上面有四个图表,是一些快捷方式;分别介绍如下:
2017-12-1421.48.43.png