Java調(diào)試那點(diǎn)事-博客-云棲社區(qū)-阿里云
https://yq.aliyun.com/articles/56
除了IDE之外,JDK也自帶了一些命令行調(diào)試工具也很方便缠借。大家用的比較多的如下表所示:
命令 描述
jdb 命令行調(diào)試工具
jps 列出所有Java進(jìn)程的PID
jstack 列出虛擬機(jī)進(jìn)程的所有線程運(yùn)行狀態(tài)
jmap 列出堆內(nèi)存上的對(duì)象狀態(tài)
jstat 記錄虛擬機(jī)運(yùn)行的狀態(tài)拆火,監(jiān)控性能
jconsole 虛擬機(jī)性能/狀態(tài)檢查可視化工具
具體用法可以參考JDK文檔跳夭,這些大家在線上調(diào)試應(yīng)用的時(shí)候用的也不少涂圆,比如一般線上load高的問題排查步驟是
先用top找到耗資源的進(jìn)程
ps+grep找到對(duì)應(yīng)的java進(jìn)程/線程
jstack分析哪些線程阻塞了,阻塞在哪里
jstat看看FullGC頻率
jmap看看有沒有內(nèi)存泄露
總結(jié)
整個(gè)JDPA有非常清晰的分層币叹,各司其職润歉,讓整個(gè)調(diào)式過程簡(jiǎn)單可以擴(kuò)展,而這一切其實(shí)都是構(gòu)建在高司令巨牛逼的Java虛擬機(jī)抽象之上的颈抚,通過JVMTI將抽象良好的虛擬機(jī)控制暴露出來踩衩,讓開發(fā)者可以自由的掌控被調(diào)試的虛擬機(jī)。有興趣的同學(xué)可以運(yùn)行下附近中的幾個(gè)例子贩汉,應(yīng)該會(huì)有更充分的了解驱富。
而且由于規(guī)范的靈活性,如果有特殊需求匹舞,完全可以自己去重新實(shí)現(xiàn)和擴(kuò)展褐鸥,而且不限于Java,舉個(gè)例子赐稽,我們可以通過agent去加密解密加載的類晶疼,保護(hù)知識(shí)產(chǎn)權(quán);我們可以記錄虛擬機(jī)運(yùn)行過程又憨,作為自動(dòng)化測(cè)試用例翠霍; 我們還可以把線上問題的診斷實(shí)踐自動(dòng)化下來,做一個(gè)快速預(yù)判 蠢莺,爭(zhēng)取最寶貴的時(shí)間寒匙。