最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK14性能管理工具之jstack使用介紹

 更新時(shí)間:2020年05月10日 10:30:57   作者:flydean  
jstack工具主要用來(lái)打印java堆棧信息,主要是java的class名字,方法名,字節(jié)碼索引,行數(shù)等信息。這篇文章主要介紹了JDK14性能管理工具之jstack使用介紹,需要的朋友可以參考下

在之前的文章中,我們介紹了JDK14中jstat工具的使用,本文我們?cè)偕钊胩接懸幌耲stack工具的使用。

jstack工具主要用來(lái)打印java堆棧信息,主要是java的class名字,方法名,字節(jié)碼索引,行數(shù)等信息。

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
  -? -h --help -help to print this help message

jstack的參數(shù)比較簡(jiǎn)單,l可以包含鎖的信息,e包含了額外的信息。

jstack的使用

我們舉個(gè)例子:

jstack -l -e 53528

輸出結(jié)果如下:

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(java.base@14.0.1/Native Method)
    at java.lang.ref.Reference.processPendingReferences(java.base@14.0.1/Reference.java:241)
    at java.lang.ref.Reference$ReferenceHandler.run(java.base@14.0.1/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

輸出的結(jié)果我們可以分為下面幾個(gè)部分:

JVM虛擬機(jī)信息

第一部分是JVM虛擬機(jī)的信息

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

上面顯示了虛擬機(jī)的thread dump時(shí)間和虛擬機(jī)的版本等信息。

Threads class SMR info

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

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是和后面線(xiàn)程的tid相匹配的。表示的是本地線(xiàn)程對(duì)象的地址,注意這些不是線(xiàn)程的ID。

大家可能注意到了里面寫(xiě)的是SMR, SMR全稱(chēng)是Safe Memory Reclamation。

什么是SMR呢?簡(jiǎn)單點(diǎn)講就是安全的內(nèi)存分配,一般這個(gè)問(wèn)題會(huì)出現(xiàn)在非自動(dòng)GC的編程語(yǔ)言中如C++。在這些語(yǔ)言中,需要自己來(lái)為對(duì)象分配內(nèi)存和銷(xiāo)毀對(duì)象,這樣就可能導(dǎo)致在多線(xiàn)程的環(huán)境中,一個(gè)地址可能被分配給了多個(gè)對(duì)象,從而出現(xiàn)了內(nèi)存分配的不安全。

線(xiàn)程信息

第三部分就是線(xiàn)程的具體信息了:

"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(java.base@14.0.1/Reference.java:241)
  at java.lang.ref.Reference$ReferenceHandler.run(java.base@14.0.1/Reference.java:213)

  Locked ownable synchronizers:
  - None

按照字段的順序,我們可以把線(xiàn)程信息分為下面幾個(gè)部分:

  • 線(xiàn)程名字:例如Reference Handler
  • 線(xiàn)程的ID:例如#2
  • 是否守護(hù)線(xiàn)程:例如daemon,daemon threads是低優(yōu)先級(jí)的thread,它的作用是為User Thread提供服務(wù)。 因?yàn)閐aemon threads的低優(yōu)先級(jí),并且僅為user thread提供服務(wù),所以當(dāng)所有的user thread都結(jié)束之后,JVM會(huì)自動(dòng)退出,不管是否還有daemon threads在運(yùn)行中。
  • 優(yōu)先級(jí):例如prio=10
  • OS線(xiàn)程的優(yōu)先級(jí):例如os_prio=31
  • cpu時(shí)間:線(xiàn)程獲得CPU的時(shí)間,例如cpu=0.67ms
  • elapsed:線(xiàn)程啟動(dòng)后經(jīng)過(guò)的wall clock time
  • allocated:本線(xiàn)程分配的分配的bytes數(shù)
  • defined_classes:本線(xiàn)程定義的class個(gè)數(shù)

注意'allocated=' 和 ‘defined_classes=' 必須要開(kāi)啟 -XX:+PrintExtendedThreadInfo才會(huì)輸出數(shù)據(jù)。

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

接下來(lái)就是線(xiàn)程的堆棧信息:

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

上面的例子是線(xiàn)程的堆棧信息,并且列出來(lái)了線(xiàn)程的狀態(tài)。

Locked Ownable Synchronizer

接下來(lái)的部分是該線(xiàn)程擁有的,可用的用于同步的排它鎖對(duì)象。

Ownable Synchronizer是一個(gè)同步器,這個(gè)同步器的同步屬性是通過(guò)使用AbstractOwnableSynchronizer或者它的子類(lèi)來(lái)實(shí)現(xiàn)的。

例如ReentrantLock和ReentrantReadWriteLock中的write-lock(注意不是read-lock,因?yàn)樾枰潘裕┚褪莾蓚€(gè)例子。

JVM Threads

接下來(lái)是JVM的線(xiàn)程信息,因?yàn)檫@個(gè)線(xiàn)程是JVM內(nèi)部的,所以沒(méi)有線(xiàn)程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)引用的信息,注意這些引用可能會(huì)導(dǎo)致內(nèi)存泄露,因?yàn)檫@些native的引用并不會(huì)被自動(dòng)垃圾回收。

JNI global refs: 43, weak refs: 45

jstack是分析線(xiàn)程的非常強(qiáng)大的工具,希望大家能夠使用起來(lái)。

總結(jié)

到此這篇關(guān)于JDK14性能管理工具之jstack使用介紹的文章就介紹到這了,更多相關(guān)JDK14性能管理工具jstack使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 線(xiàn)程池封裝及拒絕策略示例詳解

    java 線(xiàn)程池封裝及拒絕策略示例詳解

    這篇文章主要為大家介紹了java 線(xiàn)程池封裝及拒絕策略示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Spring AOP注解案例及基本原理詳解

    Spring AOP注解案例及基本原理詳解

    這篇文章主要介紹了Spring AOP注解案例及基本原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java中synchronized的幾種使用方法

    Java中synchronized的幾種使用方法

    本文主要介紹了Java中synchronized的幾種使用方法,synchronized可用于修飾普通方法、靜態(tài)方法和代碼塊,下面詳細(xì)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • java中synchronized Lock(本地同步)鎖的8種情況

    java中synchronized Lock(本地同步)鎖的8種情況

    本文主要介紹了java中synchronized Lock(本地同步)鎖的8種情況,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 使用BindingResult 自定義錯(cuò)誤信息

    使用BindingResult 自定義錯(cuò)誤信息

    這篇文章主要介紹了使用BindingResult 自定義錯(cuò)誤信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java如何將大文件切割成小文件

    Java如何將大文件切割成小文件

    這篇文章主要為大家詳細(xì)介紹了Java如何將大文件切割成小文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Java實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的三種方法

    Java實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的三種方法

    在Java中實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的方法,通常我們會(huì)使用java.util.Random類(lèi)來(lái)生成隨機(jī)數(shù),然后基于這些隨機(jī)數(shù)來(lái)選擇中獎(jiǎng)?wù)?以下將給出幾種常見(jiàn)的隨機(jī)抽獎(jiǎng)實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-09-09
  • 詳解APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào))

    詳解APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào))

    這篇文章主要介紹了APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringBoot集成Kaptcha驗(yàn)證碼的詳細(xì)過(guò)程

    SpringBoot集成Kaptcha驗(yàn)證碼的詳細(xì)過(guò)程

    Kaptcha是一個(gè)強(qiáng)大而靈活的Java驗(yàn)證碼生成庫(kù),通過(guò)合理的配置和使用,它可以有效地提高web應(yīng)用的安全性,防止自動(dòng)化程序的濫用,這篇文章主要介紹了SpringBoot集成Kaptcha驗(yàn)證碼,需要的朋友可以參考下
    2024-07-07
  • 如何在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)

    如何在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)

    這篇文章主要介紹了在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

东辽县| 吐鲁番市| 偏关县| 满城县| 巴青县| 宜章县| 和政县| 文水县| 濉溪县| 西和县| 庆城县| 棋牌| 扎赉特旗| 新乡市| 泰安市| 崇明县| 榆树市| 建平县| 东台市| 益阳市| 广宁县| 静宁县| 忻城县| 株洲市| 木兰县| 中西区| 乐都县| 平昌县| 彭阳县| 兰考县| 宁城县| 江北区| 资阳市| 南召县| 行唐县| 宜宾市| 淳安县| 河间市| 南木林县| 广灵县| 兴文县|