本文首發於公衆號: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面試題、我的成長和自我管理等主題,爲讀者提供一線開發者的工做和成長經驗,期待你能在這裏有所收穫。