JDK命令行工具
當我們進入JDK的安裝目錄裡面的/bin目錄,會發現有很多小工具,有我們熟悉的也經常用的java,javac等,下面主要介紹下大家可能不熟悉的但卻非常實用的工具的使用方法和作用。
一、jps命令
列出所有Java進程,輸出如下:
jps -q | 只輸出進程id |
jps -m | 輸出傳遞給Java進程(主函數)的參數 |
jps -m -l | -l用於輸出主函數的完整路勁 |
jps -m -l -v | -v顯示傳遞給JVM的參數 |
二、jstat命令
可以觀察Java應用程序運行時信息的工具,可以查看堆信息的詳細情況
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Advertisements
option解釋:
-class | 顯示ClassLoader的相關信息 |
-compiler | 顯示JIT編譯的相關信息 |
-GC | 與GC相關的堆信息 |
-gccause | 垃圾收集相關信息(同-gcutil),同時顯示最後一次或當前正在發生的垃圾收集的誘發原因 |
-gcnew | 新生代信息 |
-gcnewcapacity | 新生代大小與使用情況 |
-gcold | 老年代和永久代的信息 |
-gcoldcapacity | 老年代大小 |
-gcpermcapacity | 永久代大小 |
-gcutil | 垃圾收集信息 |
-printcompilation | 輸出JIT編譯的方法信息 |
-t 參數可以在輸出信息前加上一個Timestamp列,顯示程序運行時間。
-h 在周期性數據輸出時,輸出多少行數據后,跟著輸出一個表頭信息。
Advertisements
interval 輸出統計數據的周期,單位毫秒。
count指定一共輸出多少次數據。
例如:
(1)進程7572 的ClassLoader的相關信息,每秒鐘統計一次,輸出2次。
loaded:載入類的數量。 Bytes:載入類的合計大小。
Unloaded:卸載類的數量 。 Bytes:卸載類的合計大小。
Time:載入和卸載類所花費的時間。
(2)查看JIT編譯信息
Compiled:編譯任務執行的次數。 Failed:編譯失敗的次數
Invalid:編譯不可用的次數。 FailedType:最後一次編譯失敗的類型。
FailedMethod:最後一次編譯失敗的類名和方法名。
(3)與GC相關的堆信息
S0C | s0(from)的大小(KB) | S1C | s1(from)的大小(KB) | S0U | s0(from)已使用空間(KB) |
EC | eden區的大小(KB) | EU | eden區已使用空間(KB) | S1U | s1(from)已使用空間(KB) |
OC | 老年代大小(KB) | OU | 老年代已使用空間(KB) | PC | 永久區大小(KB) |
YGC | 新生代GC次數 | YGCT | 新生代GC耗時 | PU | 永久區已使用大小(KB) |
FGC | full GC次數 | FGCT | full GC耗時 | GCT | GC總耗時 |
(4)與gccapacity相關,包括了各個代的最值,單位(KB)。
NGCMN | 新生代最小值 | NGCMX | 新生代最大值 | NGC | 當前新生代大小 |
OGCMN | 老年代最小值 | OGCMX | 老年代最大值 | ||
PGCMN | 永久代最小值 | PGCMX | 永久代最大值 |
(5)顯示最近一次GC的原因及當前GC的原因
◇LGCC:上次GC的原因。 ◇GCC:當前GC的原因。
圖中顯示,最近一次GC是由於顯示的System.gc()調用所引起的。當前時刻未進行GC。
(6)-gcnew查看新生代的一些詳細信息。
◇TT:新生代對象晉陞到老年代對象的年齡。
◇MTT:新生代對象晉陞到老年代對象的年齡最大值。
◇DSS:所需的survivor區大小。
(7)-gcnewcapacity詳細輸出新生代各個區的大小信息:
◇S0CMX:s0區的最大值(KB)。
◇S1CMX:s1區的最大值(KB)。
◇ECMX:eden區的最大值(KB)。
(8)-gcold展現老年代GC的概況。
(9)-gcutil:展示GC回收相關信息。
S0 | s0區使用的百分比 | S1 | s1區使用的百分比 | E | eden區使用的百分比 |
O | old區使用的百分比 | P | 永久區使用的百分比 |
三、jinfo:查看運行時某一個JVM參數的實際取值,甚至可以在運行時修改部分參數,並使之立即生效。
jinfo <option> <pid>
option說明:
☆-flag<name>:列印指定JVM的參數值。
☆-flag[+|-]<name>:列印指定JVM參數的布爾值。
☆-flag<name>=<value>:設置指定JVM的參數值。
(1)jinfo -flags pid列印該進程的JVM參數
(2)顯示是否列印GC詳細信息,下例顯示通過jinfo對PrintGCDetails參數的修改,他可以在java程序運行時關閉或者打開這個開關。
四、jmap:生成Java應用程序的堆快照和對象的統計信息;
使用:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
1)options:
executable Java executable from which the core dump was produced.(可能是產生core dump的java可執行程序)core 將被列印信息的core dump文件
remote-hostname-or-IP 遠程debug服務的主機名或ip
server-id 唯一id,假如一台主機上多個遠程debug服務
2)基本參數:
☆-dump:[live,]format=b,file=<filename> :使用hprof二進位形式,輸出jvm的heap內容到文件=. live 子選項是可選的,假如指定live選項,那麼只輸出活的對象到文件.
☆-finalizerinfo :列印正等候回收的對象的信息.
☆-heap :列印heap的概要信息,GC使用的演算法,heap的配置及wise heap的使用情況.
☆-histo[:live] :列印每個class的實例數目,內存佔用,類全名信息. VM的內部類名字開頭會加上 綴」*」. 如果live子參數加上后,只統計活的對象數量.
☆-permstat :列印classload和jvm heap長久層的信息. 包含每個classloader的名字,活潑性,地址,父 classloader和載入的class數量. 另外,內部String的數量和佔用內存數也會列印出來.
☆-F :強迫在pid沒有相應的時候使用-dump或者-histo參數. 在這個模式下,live子參數無效.
☆-h | -help :列印輔助信息
☆-J :傳遞參數給jmap啟動的jvm.
(1)jmap -histo pid >路勁 :生成pid的Java程序對象統計信息,並輸出到文件中。
輸出了內存中的實例數量和合計。
(2)jmap -dump:format=b,file=路勁 pid:導出Java應用程序的當前堆快照,要使用Visual VM打開,或者使用jhat命令。
五、jhat命令
用於分析Java應用程序的堆快照內容:
下例是分析上文生成的堆快照
jhat分析完成後,使用HTTP伺服器展示其分析結果,在瀏覽器中訪問http://127.0.0.1:7000
jhat伺服器顯示了所有非平台類信息。點擊鏈接進入,可以查看類的超類、ClassLoader以及該類的實例等信息。
頁面底部,jhat為開發人員提供了其他查詢方式
通過這些鏈接,開發者可以進一步查看所有類信息、所有類的實例數量以及實例的具體信息。
最後有一個鏈接指向OQL查詢界面
在方框中輸入查詢信息,查詢格式可以點擊OQL Help進入進行參考,如下圖所示,
在方框中輸入查詢語句可以查詢到相應的信息:如下圖所示
六、jstack命令
導出java應用程序的線程堆棧
使用: jstack [-l] <pid> [文件路勁]
點擊此處輸入圖片描述