日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

jdk自带常用命令行工具使用

發(fā)布時(shí)間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jdk自带常用命令行工具使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?轉(zhuǎn)自:http://blog.csdn.net/winwill2012/article/details/46364923



jps命令使用

jps命令類(lèi)似于Linux下的ps命令,用于列出當(dāng)前正在運(yùn)行的所有Java進(jìn)程。

基本用法

直接運(yùn)行不加任何參數(shù)就能列出所有java進(jìn)程的pid和類(lèi)的短名稱(chēng)。例如:

常用參數(shù)

-q參數(shù)

-q可以指定jps只列出pid,而不輸出類(lèi)的短名稱(chēng),例如:

-m參數(shù)

-m參數(shù)可以用于列出傳遞給java進(jìn)程主函數(shù)的參數(shù),例如:


這里可以看到傳遞給jps(jps本身也是java進(jìn)程)進(jìn)程的參數(shù)就是-m

-l參數(shù)

-l參數(shù)用于輸出主類(lèi)的完整路徑,例如:

-v參數(shù)

-v參數(shù)可以列出傳遞給java虛擬機(jī)的參數(shù),例如:

jstat命令使用

概述

jstat是一個(gè)可以用于觀察Java應(yīng)用程序運(yùn)行時(shí)相關(guān)信息的工具,功能非常強(qiáng)大,可以通過(guò)它查看堆信息的詳細(xì)情況。

基本用法

jstat命令的基本使用語(yǔ)法如下:

jstat -option [-t] [-h] pid [interval] [count]

  • 選項(xiàng)option可以由以下值構(gòu)成。?

    • -class:顯示ClassLoader的相關(guān)信息。

    • -compiler:顯示JIT編譯的相關(guān)信息。

    • -gc:顯示與gc相關(guān)的堆信息。

    • -gccapacity:顯示各個(gè)代的容量及使用情況。

    • -gccause:顯示垃圾回收的相關(guān)信息(同-gcutil),同時(shí)顯示最后一次或當(dāng)前正在發(fā)生的垃圾回收的誘因。

    • -gcnew:顯示新生代信息。

    • -gcnewcapacity:顯示新生代大小與使用情況。

    • -gcold:顯示老生代和永久代的信息。

    • -gcoldcapacity:顯示老年代的大小。

    • -gcpermcapacity:顯示永久代的大小。

    • -gcutil:顯示垃圾收集信息。

    • -printcompilation:輸出JIT編譯的方法信息。

  • -t參數(shù)可以在輸出信息前面加上一個(gè)Timestamp列,顯示程序運(yùn)行的時(shí)間。

  • -h參數(shù)可以在周期性的數(shù)據(jù)輸出時(shí),輸出多少行數(shù)據(jù)后,跟著輸出一個(gè)表頭信息。

  • interval參數(shù)用于指定輸出統(tǒng)計(jì)數(shù)據(jù)的周期,單位為毫秒(ms)。

  • count參數(shù)用于指定一共輸出多少次數(shù)據(jù)。

詳細(xì)使用

-class使用

下面命令輸出pid為2500這個(gè)進(jìn)程的ClassLoader相關(guān)信息,每秒統(tǒng)計(jì)一次信息,一共輸出兩次。?

Loaded表示載入的類(lèi)的數(shù)量,第一個(gè)Bytes表示載入的類(lèi)的合計(jì)大小,Unloaded表示卸載的類(lèi)數(shù)量,第二個(gè)Bytes表示卸載的類(lèi)的合計(jì)大小,Time表示加載和卸載類(lèi)花的總的時(shí)間。

-compiler使用

下面的命令查看JIT編譯的信息:?

Compiled表示編譯任務(wù)執(zhí)行的次數(shù),Failed表示編譯失敗的次數(shù),Invalid表示編譯不可用的次數(shù),Time表示編譯的總耗時(shí),FailedType表示最后一次編譯的類(lèi)型,FailedMethod表示最后一次編譯失敗的類(lèi)名和方法名。

-gc使用

下面的命令顯示與gc相關(guān)的堆信息的輸出:?

  • S0C:s0(from)的大小(KB)

  • S1C:s1(from)的大小(KB)

  • S0U:s0(from)已使用的空間(KB)

  • S1U:s1(from)已經(jīng)使用的空間(KB)

  • EC:eden區(qū)的大小(KB)

  • EU:eden區(qū)已經(jīng)使用的空間(KB)

  • OC:老年代大小(KB)

  • OU:老年代已經(jīng)使用的空間(KB)

  • PC:永久區(qū)大小(KB)

  • PU:永久區(qū)已經(jīng)使用的空間(KB)

  • YGC:新生代gc次數(shù)

  • YGCT:新生代gc耗時(shí)

  • FGC:Full gc次數(shù)

  • FGCT:Full gc耗時(shí)

  • GCT:gc總耗時(shí)

-gccapacity使用

下面的命令顯示了各個(gè)代的信息,與-gc相比,它不僅輸出了各個(gè)代的當(dāng)前大小,還輸出了各個(gè)代的最大值與最小值:?

* NGCMN:新生代最小值(KB)?
* NGCMX:新生代最大值(KB)?
* NGC:當(dāng)前新生代大小(KB)?
* OGCMN:老年大最小值(KB)?
* OGCMX:老年代最大值(KB)?
* OGC:當(dāng)前老年代大小(KB)?
* PGCMN:永久代最小值(KB)?
* PGCMX:永久代最大值(KB)

-gccause使用

下面命令顯示最近一次gc的原因,以及當(dāng)前gc的原因:?

  • LGCC:上次gc的原因,從圖中可以看到上次gc的原因是Allocation Failure

  • GCC:當(dāng)前gc的原因,圖中當(dāng)前沒(méi)有g(shù)c

-gcnew使用

下面的命令顯示新生代的詳細(xì)信息:?

* TT:新生代對(duì)象晉升到老年代對(duì)象的年齡。?
* MTT:新生代對(duì)象晉升到老年代對(duì)象的年齡的最大值。?
* DSS:所需的Survivor區(qū)的大小。

-gcnewcapacity使用

下面的命令詳細(xì)輸出了新生代各個(gè)區(qū)的大小信息:?

* S0CMX:s0區(qū)的最大值(KB)?
* S1CMX:s1區(qū)的最大值(KB)?
* ECMX:eden區(qū)的最大值(KB)

-gcold使用

下面的命令顯示老年代gc概況:?

-gcoldcapacity使用

下面的命令用于顯示老年代的容量信息:?

-gcpermcapacity使用

下面的命令用于顯示永久區(qū)的使用情況:?


?

jinfo命令使用

概述

jinfo可以用來(lái)查看正在運(yùn)行的Java運(yùn)用程序的擴(kuò)展參數(shù),甚至支持在運(yùn)行時(shí)動(dòng)態(tài)地更改部分參數(shù),他的基本使用語(yǔ)法如下:

jinfo -< option > < pid >

其中option可以為以下信息:?
* -flag< name >: 打印指定java虛擬機(jī)的參數(shù)值。?
* -flag [+|-]< name >:設(shè)置或取消指定java虛擬機(jī)參數(shù)的布爾值。?
* -flag < name >=< value >:設(shè)置指定java虛擬機(jī)的參數(shù)的值。

使用示例

  • 下面的命令顯示了新生代對(duì)象晉升到老年代對(duì)象的最大年齡。在運(yùn)行程序運(yùn)行時(shí)并沒(méi)有指定這個(gè)參數(shù),但是通過(guò)jinfo,可以查看這個(gè)參數(shù)的當(dāng)前的值。?

  • 下面的命令顯示是否打印gc詳細(xì)信息:?

  • 下面的命令在運(yùn)用程序運(yùn)行時(shí)動(dòng)態(tài)打開(kāi)打印詳細(xì)gc信息開(kāi)關(guān):?

  • 注意事項(xiàng)

    jinfo雖然可以在java程序運(yùn)行時(shí)動(dòng)態(tài)地修改虛擬機(jī)參數(shù),但并不是所有的參數(shù)都支持動(dòng)態(tài)修改。


    jmap命令使用

    概述

    jmap是一個(gè)多功能的命令。它可以生成Java程序的堆dump文件,也可以查看堆內(nèi)對(duì)象實(shí)例的統(tǒng)計(jì)信息,查看ClassLoader的信息以及Finalizer隊(duì)列。

    使用示例

    導(dǎo)出對(duì)象統(tǒng)計(jì)信息

    下面的命令生成PID為2500的java成粗的對(duì)象的統(tǒng)計(jì)信息,并輸出到out.txt文件中:

    [qifuguang@winwill~]$?jmap?-histo?2500?>?out.txt [qifuguang@winwill~]$[qifuguang@winwill~]$[qifuguang@winwill~]$[qifuguang@winwill~]$[qifuguang@winwill~]$123456123456

    生成的文件如下:?

    從文件中可以看到,統(tǒng)計(jì)信息顯示了內(nèi)存中實(shí)例的數(shù)量和合計(jì)。

    導(dǎo)出程序堆快照

    下面的命令導(dǎo)出PID為2500的java程序當(dāng)前的堆快照:

    [qifuguang@winwill~]$?jmap?-dump:format=b,file=dump.bin?2500Dumping?heap?to?/home/qifuguang/dump.bin?...Heap?dump?file?created123123

    該命令成功地將運(yùn)用程序的當(dāng)前的堆快照導(dǎo)出到了dump.bin文件,之后可以使用Visual VM,MAT等工具分析對(duì)快照文件。

    查看Finalizer隊(duì)列

    下面的命令查看虛擬機(jī)Finalizer隊(duì)列的信息:?

    從圖中可以看到,隊(duì)列中堆積了大量的TestFinalizer$LY對(duì)象實(shí)例,還有其他一些對(duì)象。

    查看ClassLoader信息

    下面的命令顯示了虛擬機(jī)當(dāng)前的ClassLoader信息:?

    從圖中可以看到,當(dāng)前虛擬機(jī)一共有3個(gè)ClassLoader,bootstrap加載了492個(gè)對(duì)象,對(duì)象總大小為943655byte,同時(shí)還顯示了各個(gè)ClassLoader之間的父子關(guān)系。


    jhat命令使用

    概述

    jhat(Java?Head Analyse Tool)是jdk自帶的用來(lái)分析Java堆快照的工具,具體的使用方法是:

    jhat dump_file_name

    使用示例

    在此以前文dump出來(lái)的文件(dump.bin)為例,演示怎么使用jhat分析堆文件。?

    上圖中使用jhat命令打開(kāi)了之前dump出來(lái)的堆快照文件,可以看到,命令成功執(zhí)行后會(huì)在命令執(zhí)行的本機(jī)啟動(dòng)一個(gè)http服務(wù),可以在瀏覽器上打開(kāi)本機(jī)的7000端口查看詳細(xì)的分析結(jié)果:

    頁(yè)面中顯示了所有非平臺(tái)類(lèi)信息,點(diǎn)擊鏈接進(jìn)入,可以查看選中的類(lèi)的超類(lèi),ClassLoader以及該類(lèi)的實(shí)例等信息。此外,在頁(yè)面的地步,jhat還為開(kāi)發(fā)人員提供了其他查詢方式。如圖所示:

    通過(guò)這些鏈接,開(kāi)發(fā)人員可以查看所有類(lèi)信息(包含java平臺(tái)的類(lèi)),所有根節(jié)點(diǎn),finalizer對(duì)象等等信息。最后提供了OQL查詢工具,開(kāi)發(fā)人員可以輸入OQL語(yǔ)言查詢相應(yīng)的類(lèi)。關(guān)于OQL,筆者就不過(guò)多介紹,想了解更多的可以點(diǎn)擊這里了解。

    ?

    jstack命令使用

    概述

    jstack可用于導(dǎo)出Java運(yùn)用程序的線程堆棧,其基本使用語(yǔ)法為:

    jstack [-l] pid

    -l 選項(xiàng)用于打印鎖的額外信息。

    使用示例

    下面這段代碼運(yùn)行之后會(huì)出現(xiàn)死鎖現(xiàn)象(因?yàn)榫€程1持有l(wèi)ock1,在等待lock2,線程2持有l(wèi)ock2在等待lock1,造成了循環(huán)等待,形成死鎖):

    package?com.winwill.deadlock;/***?@author?qifuguang*?@date?15/6/4?16:45*/public?class?TestDeadLock?{private?static?final?Object?lock1?=?new?Object();????private?static?final?Object?lock2?=?new?Object();????public?static?void?main(String[]?args)?{Thread?t1?=?new?Thread(new?Runnable()?{????????????@Overridepublic?void?run()?{????????????????synchronized?(lock1)?{????????????????????try?{Thread.sleep(1000);}?catch?(Exception?e)?{e.printStackTrace();}????????????????????synchronized?(lock2)?{System.out.println("線程1執(zhí)行....");}}}});Thread?t2?=?new?Thread(new?Runnable()?{????????????@Overridepublic?void?run()?{????????????????synchronized?(lock2)?{????????????????????try?{Thread.sleep(1000);}?catch?(Exception?e)?{e.printStackTrace();}????????????????????synchronized?(lock1)?{System.out.println("線程2執(zhí)行...");}}}});t1.start();t2.start();} }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

    我們運(yùn)行這段代碼,然后使用jstack命令導(dǎo)出這個(gè)程序的線程堆棧信息:

    [qifuguang@Mac~]$ jstack -l 21023 > /tmp/deadlock.txt

    打開(kāi)導(dǎo)出的線程堆棧信息文件,文件末尾如下所示:

    如圖所示,導(dǎo)出的線程堆棧文件中明確提示發(fā)現(xiàn)死鎖,并且指明了死鎖的原因。

    總結(jié)

    jstack不僅能夠?qū)С鼍€程堆棧,還能自動(dòng)進(jìn)行死鎖檢測(cè),輸出線程死鎖原因。


    ?jcmd命令使用

    概述

    在JDK 1.7之后,新增了一個(gè)命令行工具jcmd。它是一個(gè)多功能工具,可以用來(lái)導(dǎo)出堆,查看Java進(jìn)程,導(dǎo)出線程信息,執(zhí)行GC等。

    使用示例

    下面這個(gè)命令能夠列出當(dāng)前運(yùn)行的所有虛擬機(jī):

    參數(shù)-l表示列出所有java虛擬機(jī),針對(duì)每一個(gè)虛擬機(jī),可以使用help命令列出該虛擬機(jī)支持的所有命令,如下圖所示,以21024這個(gè)進(jìn)程為例:

    查看虛擬機(jī)啟動(dòng)時(shí)間VM.uptime

    打印線程棧信息Thread.print

    查看系統(tǒng)中類(lèi)統(tǒng)計(jì)信息GC.class_histogram

    執(zhí)行如下命令:

    [qifuguang@Mac~]$ jcmd 21024 GC.class_histogram

    得到結(jié)果如下:?

    導(dǎo)出堆信息GC.heap_dump

    使用如下命令可以導(dǎo)出當(dāng)前堆棧信息,這個(gè)命令功能和?jmap -dump?
    功能一樣

    獲取系統(tǒng)Properties內(nèi)容VM.system_properties

    獲取啟動(dòng)參數(shù)VM.flags

    獲取所有性能相關(guān)數(shù)據(jù)PerfCounter.print

    總結(jié)

    從以上示例可以看出,jcmd擁有jmap的大部分功能,并且Oracle官方也建議使用jcmd代替jmap。


    轉(zhuǎn)載于:https://blog.51cto.com/as007012/1911629

    總結(jié)

    以上是生活随笔為你收集整理的jdk自带常用命令行工具使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。