jstack和線程dump實(shí)例解析
jstack定義:
jstack是Java虛擬機(jī)自帶的一種堆棧跟蹤工具。
基本介紹:
jstack用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照。線程快照是當(dāng)前java虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時(shí)間停頓的原因,如線程間死鎖、死循環(huán)、請(qǐng)求外部資源導(dǎo)致的長時(shí)間等待等。
線程出現(xiàn)停頓的時(shí)候通過jstack來查看各個(gè)線程的調(diào)用堆棧,就可以知道沒有響應(yīng)的線程到底在后臺(tái)做什么事情,或者等待什么資源。
命令格式:
jstack [ option ] pid
基本參數(shù):
-F 當(dāng)'jstack [-l] pid'沒有相應(yīng)的時(shí)候強(qiáng)制打印棧信息
-l 長列表. 打印關(guān)于鎖的附加信息,例如屬于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c++框架的所有棧信息. -h | -help打印幫助信息
pid 需要被打印配置信息的java進(jìn)程id,可以用jps工具查詢
案例
C:\Users\Administrator>jstack 5516 Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode): "DestroyJavaVM" prio=6 tid=0x000000000027d800 nid=0x1bb0 waiting on condition [0 x0000000000000000] java.lang.Thread.State: RUNNABLE "Thread-1" prio=6 tid=0x000000000cb13800 nid=0x19ac waiting for monitor entry [0 x000000000d67f000] java.lang.Thread.State: BLOCKED (on object monitor) at thread.DeadLockDemo$2.run(DeadLockDemo.java:35) - waiting to lock <0x00000007d5a9be88> (a java.lang.String) - locked <0x00000007d5a9beb8> (a java.lang.String) at java.lang.Thread.run(Unknown Source) "Thread-0" prio=6 tid=0x000000000cb0e800 nid=0x6bc waiting for monitor entry [0x 000000000d48f000] java.lang.Thread.State: BLOCKED (on object monitor) at thread.DeadLockDemo$1.run(DeadLockDemo.java:21) - waiting to lock <0x00000007d5a9beb8> (a java.lang.String) - locked <0x00000007d5a9be88> (a java.lang.String) at java.lang.Thread.run(Unknown Source)
這里運(yùn)行了一段死鎖code,導(dǎo)致程序中的兩個(gè)線程都在等待對(duì)方釋放鎖,造成程序死鎖。
從這段代碼中可以明確的看出是 DeadLockDemo.class 中的第35行,和21行出現(xiàn)了阻塞,然后就是要優(yōu)化這個(gè)函數(shù)了。
PS : 在實(shí)際運(yùn)行中,往往一次 dump的信息,還不足以確認(rèn)問題。建議產(chǎn)生三次 dump信息,如果每次 dump都指向同一個(gè)問題,我們才確定問題的典型性。
總結(jié)
以上就是本文關(guān)于jstack和線程dump實(shí)例解析的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
一篇文章教你如何用Java自定義一個(gè)參數(shù)校驗(yàn)器
這篇文章主要介紹了使用java自定義一個(gè)參數(shù)校驗(yàn)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)2021-09-09SpringBoot項(xiàng)目中通過@Value給參數(shù)賦值失敗的解決方案
springboot項(xiàng)目中通過@Value給屬性附值失敗,給參數(shù)賦值失敗,打印為空值,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家解決問題有一定的幫助,需要的朋友可以參考下2024-04-04