java自帶的對象Jstack截取過程中的客棧信息。本站提示廣大學習愛好者:(java自帶的對象Jstack截取過程中的客棧信息)文章只能為提供參考,不一定能成為您想要的結果。以下是java自帶的對象Jstack截取過程中的客棧信息正文
在Java軟件的應用進程中,有時會莫名的湧現奇異的成績。而這些成績經常沒法應用日記信息定位,這時候我們就須要經由過程檢查過程外部線程的客棧挪用關系來剖析成績出在哪裡。
舉個例子,當我們在做某個操作時,莫名的會彈出多個正告框,個中有些信息是正常的,有些則不是。關於這些毛病的正告信息,我們該若何定位是哪一個地位的代碼湧現了毛病彈出的框呢? 我們就須要在彈框今後,去檢查軟件的各個線程,去查找畢竟是哪一個線程招致了該成績。可是有時由於情況、時光等成績,我們基本不克不及拿著IDE去調試, 只能經由過程對象軟件拍下內存快照,然後剖析內存信息。
明天引見一款經常使用的對象:Jstack
Jstack 是JDK自帶的對象,同時也是在JVM機能調優種出鏡率異常高的一款軟件。所以控制它長短常有需要的。
Jstack可以生成JVM以後時光點的線程快照。
線程快照就是以後JVM內每條線程正在履行的辦法客棧的聚集。而生成線程快照的重要緣由:
1、經由過程線程快照定位線程湧現長時光停留的緣由,如線程間逝世鎖、逝世輪回、要求內部資本招致的長時光期待
2、經由過程線程快照剖析以後履行辦法的挪用關系來肯定異常信息的泉源。
它的應用異常簡略:
(ps:條件是你曾經裝有帶有Jstack的JDK。同時最好曾經設置了情況變量。)
第一步: 經由過程Windows的義務治理器檢查過程的PID
這裡簡略說下甚麼是PID:PID就是各過程的身份標識,他是在軟件啟動後,由操作體系分派的獨一的、用來標識過程身份的一個標識
如圖
在過程頁簽下,檢查 > 選擇列
勾選PID 然後肯定
切到運用法式頁簽,選摘要快照內存的法式。圖片當選擇的是Android Studio。點擊右鍵轉到過程。
這裡就檢查到 Android Studio對應的PID是 9952
第二步 翻開敕令行,履行Jstack法式
留意,假如沒有勝利添加情況變量,那末這裡只能在Jstack的途徑下履行,不然操作體系沒法辨認。
如圖,這裡普通有兩個運轉參數,用來拍取內存快照,
他們的寄義以下:
-l long listings,會打印出額定的鎖信息,在產生逝世鎖時可以用jstack -l pid來不雅察鎖持無情況
-m mixed mode,不只會輸入Java客棧信息,還會輸入C/C++客棧信息(好比Native辦法)
我們普通應用-l參數便可以知足須要
格局以下 Jstack -l PID >> 123.txt
ps 這裡留意下 >>是重定向的意思,也就是將拍取到的快照定向輸入到987.txt中。>> 的兩次最好堅持空格
如許我們就會在敕令行途徑下生成一個987.txt文件,同時將內存快照寫入到這個文本中
以下圖: