中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

JDK14中jstack的使用方法

這篇文章主要講解了JDK14中jstack的使用方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

創新互聯公司網站建設公司是一家服務多年做網站建設策劃設計制作的公司,為廣大用戶提供了成都網站制作、成都網站設計,成都網站設計,1元廣告,成都做網站選創新互聯公司,貼合企業需求,高性價比,滿足客戶不同層次的需求一站式服務歡迎致電。

jstack工具主要用來打印java堆棧信息,主要是java的class名字,方法名,字節碼索引,行數等信息。

jstack的命令格式

Usage:
  jstack [-l][-e] <pid>
    (to connect to running process)

Options:
  -l long listing. Prints additional information about locks
  -e extended listing. Prints additional information about threads
  -&#63; -h --help -help to print this help message

jstack的參數比較簡單,l可以包含鎖的信息,e包含了額外的信息。

jstack的使用

我們舉個例子:

jstack -l -e 53528

輸出結果如下:

2020-05-09 21:46:51
Full thread dump Java HotSpot(TM) 64-Bit Server VM (14.0.1+7 mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x00007fda0660eb00, length=14, elements={
0x00007fda04811000, 0x00007fda05845800, 0x00007fda05012000, 0x00007fda05847800,
0x00007fda05843800, 0x00007fda05854800, 0x00007fda0481f000, 0x00007fda0481f800,
0x00007fda04018800, 0x00007fda041ff800, 0x00007fda05a28800, 0x00007fda05b1a800,
0x00007fda05b1d800, 0x00007fda042be000
}
"Reference Handler" #2 daemon prio=10 os_prio=31 cpu=0.67ms elapsed=66335.21s allocated=0B defined_classes=0 tid=0x00007fda04811000 nid=0x4603 waiting on condition  [0x000070000afe1000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.ref.Reference.waitForReferencePendingList([email protected]/Native Method)
    at java.lang.ref.Reference.processPendingReferences([email protected]/Reference.java:241)
    at java.lang.ref.Reference$ReferenceHandler.run([email protected]/Reference.java:213)
   Locked ownable synchronizers:
    - None
...
"VM Thread" os_prio=31 cpu=1433.78ms elapsed=66335.22s tid=0x00007fda0506b000 nid=0x4803 runnable
"GC Thread#0" os_prio=31 cpu=18.63ms elapsed=66335.23s tid=0x00007fda0502a800 nid=0x3203 runnable
"GC Thread#1" os_prio=31 cpu=19.64ms elapsed=66334.06s tid=0x00007fda050e5800 nid=0x9d03 runnable
"GC Thread#2" os_prio=31 cpu=17.72ms elapsed=66334.06s tid=0x00007fda05015000 nid=0x6203 runnable
"GC Thread#3" os_prio=31 cpu=14.57ms elapsed=66332.78s tid=0x00007fda05138800 nid=0x6503 runnable
"G1 Main Marker" os_prio=31 cpu=0.25ms elapsed=66335.23s tid=0x00007fda05031000 nid=0x3303 runnable
"G1 Conc#0" os_prio=31 cpu=14.85ms elapsed=66335.23s tid=0x00007fda05031800 nid=0x4b03 runnable
"G1 Refine#0" os_prio=31 cpu=3.25ms elapsed=66335.23s tid=0x00007fda0583a800 nid=0x4a03 runnable
"G1 Young RemSet Sampling" os_prio=31 cpu=5929.79ms elapsed=66335.23s tid=0x00007fda0505a800 nid=0x3503 runnable
"VM Periodic Task Thread" os_prio=31 cpu=21862.12ms elapsed=66335.13s tid=0x00007fda0505b000 nid=0xa103 waiting on condition
JNI global refs: 43, weak refs: 45

輸出的結果我們可以分為下面幾個部分:

JVM虛擬機信息

第一部分是JVM虛擬機的信息

2020-05-09 21:46:51
Full thread dump Java HotSpot(TM) 64-Bit Server VM (14.0.1+7 mixed mode, sharing):

上面顯示了虛擬機的thread dump時間和虛擬機的版本等信息。

Threads class SMR info

第二部分是JVM中非JVM(非VM和非GC的線程)的內部線程信息。

Threads class SMR info:
_java_thread_list=0x00007fda0660eb00, length=14, elements={
0x00007fda04811000, 0x00007fda05845800, 0x00007fda05012000, 0x00007fda05847800,
0x00007fda05843800, 0x00007fda05854800, 0x00007fda0481f000, 0x00007fda0481f800,
0x00007fda04018800, 0x00007fda041ff800, 0x00007fda05a28800, 0x00007fda05b1a800,
0x00007fda05b1d800, 0x00007fda042be000
}

這些elements是和后面線程的tid相匹配的。表示的是本地線程對象的地址,注意這些不是線程的ID。

大家可能注意到了里面寫的是SMR, SMR全稱是Safe Memory Reclamation。

什么是SMR呢?簡單點講就是安全的內存分配,一般這個問題會出現在非自動GC的編程語言中如C++。在這些語言中,需要自己來為對象分配內存和銷毀對象,這樣就可能導致在多線程的環境中,一個地址可能被分配給了多個對象,從而出現了內存分配的不安全。

線程信息

第三部分就是線程的具體信息了:

"Reference Handler" #2 daemon prio=10 os_prio=31 cpu=0.67ms elapsed=66335.21s allocated=0B defined_classes=0 tid=0x00007fda04811000 nid=0x4603 waiting on condition [0x000070000afe1000]
  java.lang.Thread.State: RUNNABLE
  at java.lang.ref.Reference.waitForReferencePendingList(java.base@14.0.1/Native Method)
  at java.lang.ref.Reference.processPendingReferences([email protected]/Reference.java:241)
  at java.lang.ref.Reference$ReferenceHandler.run([email protected]/Reference.java:213)

  Locked ownable synchronizers:
  - None

按照字段的順序,我們可以把線程信息分為下面幾個部分:

  • 線程名字:例如Reference Handler
  • 線程的ID:例如#2
  • 是否守護線程:例如daemon,daemon threads是低優先級的thread,它的作用是為User Thread提供服務。 因為daemon threads的低優先級,并且僅為user thread提供服務,所以當所有的user thread都結束之后,JVM會自動退出,不管是否還有daemon threads在運行中。
  • 優先級:例如prio=10
  • OS線程的優先級:例如os_prio=31
  • cpu時間:線程獲得CPU的時間,例如cpu=0.67ms
  • elapsed:線程啟動后經過的wall clock time
  • allocated:本線程分配的分配的bytes數
  • defined_classes:本線程定義的class個數

注意'allocated=' 和 ‘defined_classes=' 必須要開啟 -XX:+PrintExtendedThreadInfo才會輸出數據。

  • Address:java線程的地址,例如:tid=0x00007fda04811000
  • OS線程ID:例如nid=0x4603
  • 線程狀態:例如waiting on condition
  • 最新的Java堆棧指針:最新的java堆棧指針SP,例如:[0x000070000afe1000]

接下來就是線程的堆棧信息:

java.lang.Thread.State: RUNNABLE
  at java.lang.ref.Reference.waitForReferencePendingList(java.base@14.0.1/Native Method)
  at java.lang.ref.Reference.processPendingReferences([email protected]/Reference.java:241)
  at java.lang.ref.Reference$ReferenceHandler.run([email protected]/Reference.java:213)

上面的例子是線程的堆棧信息,并且列出來了線程的狀態。

Locked Ownable Synchronizer

接下來的部分是該線程擁有的,可用的用于同步的排它鎖對象。

Ownable Synchronizer是一個同步器,這個同步器的同步屬性是通過使用AbstractOwnableSynchronizer或者它的子類來實現的。

例如ReentrantLock和ReentrantReadWriteLock中的write-lock(注意不是read-lock,因為需要排它性)就是兩個例子。

JVM Threads

接下來是JVM的線程信息,因為這個線程是JVM內部的,所以沒有線程ID:

"VM Thread" os_prio=31 cpu=1433.78ms elapsed=66335.22s tid=0x00007fda0506b000 nid=0x4803 runnable

"GC Thread#0" os_prio=31 cpu=18.63ms elapsed=66335.23s tid=0x00007fda0502a800 nid=0x3203 runnable

"GC Thread#1" os_prio=31 cpu=19.64ms elapsed=66334.06s tid=0x00007fda050e5800 nid=0x9d03 runnable

"GC Thread#2" os_prio=31 cpu=17.72ms elapsed=66334.06s tid=0x00007fda05015000 nid=0x6203 runnable

"GC Thread#3" os_prio=31 cpu=14.57ms elapsed=66332.78s tid=0x00007fda05138800 nid=0x6503 runnable

"G1 Main Marker" os_prio=31 cpu=0.25ms elapsed=66335.23s tid=0x00007fda05031000 nid=0x3303 runnable

"G1 Conc#0" os_prio=31 cpu=14.85ms elapsed=66335.23s tid=0x00007fda05031800 nid=0x4b03 runnable

"G1 Refine#0" os_prio=31 cpu=3.25ms elapsed=66335.23s tid=0x00007fda0583a800 nid=0x4a03 runnable

"G1 Young RemSet Sampling" os_prio=31 cpu=5929.79ms elapsed=66335.23s tid=0x00007fda0505a800 nid=0x3503 runnable
"VM Periodic Task Thread" os_prio=31 cpu=21862.12ms elapsed=66335.13s tid=0x00007fda0505b000 nid=0xa103 waiting on condition

JNI References

最后一部分是JNI(Java Native Interface)引用的信息,注意這些引用可能會導致內存泄露,因為這些native的引用并不會被自動垃圾回收。

JNI global refs: 43, weak refs: 45

jstack是分析線程的非常強大的工具,希望大家能夠使用起來。

看完上述內容,是不是對JDK14中jstack的使用方法有進一步的了解,如果還想學習更多內容,歡迎關注創新互聯行業資訊頻道。

網頁名稱:JDK14中jstack的使用方法
URL標題:http://m.2m8n56k.cn/article8/jjdsip.html

成都網站建設公司_創新互聯,為您提供面包屑導航網站維護、自適應網站、服務器托管、企業網站制作、標簽優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 国产一区自拍视频 | 欧美色网在线 | 亚洲人的天堂男人爽爽爽 | 一区二区三区精品国产 | 欧美日韩视频免费播放 | 亚洲欧美专区精品久久 | 国内精品久久久久久影院老狼 | 18成人免费观看网站入口 | 国产精品高清视亚洲精品 | 国产91网| 99福利网 | 台湾三级在线播放 | 国产边打电话边做对白刺激 | 九九大香尹人视频免费 | 精品久久久久不卡无毒 | 久久亚洲一级毛片 | 国产精品免费观看视频播放 | 久久久久毛片免费观看 | 99精品99| 久久在线一区 | 久久精品视 | 久久久久久久久久免观看 | 在线观看日本永久免费视频 | xxxx欧美视频 | hdxxx色视频 hd欧美xxx欧美极品hd | 欧美成人做性视频在线播放 | 2022国产精品手机在线观看 | 久草在线免费看 | 欧美一级毛片欧美大尺度一级毛片 | 国产成人综合手机在线播放 | 精品一久久香蕉国产线看观 | 国产一级片观看 | 欧美在线视 | 国产亚洲精品久久久久久久网站 | 小泽玛利亚的一级毛片的 | 国产精品久久久久久久专区 | 韩国在线精品福利视频在线观看 | 美女张腿男人桶免费视频 | 国产午夜精品久久久久九九 | 波多野结衣在线观看高清免费资源 | 成人欧美日韩高清不卡 |