一、JDK內置工具 - javap
1、 介紹
java 反編譯工具,主要用於根據Java字節碼文件反彙編爲Java源代碼文件。
2、命令
javap <options> <classes>
3、命令集
-help --help -? 輸出此用法消息 -version 版本信息,其實是當前javap所在jdk的版本信息,不是class在哪個jdk下生成的。 -v -verbose 輸出附加信息(包括行號、本地變量表,反彙編等詳細信息) -l 輸出行號和本地變量表 -public 僅顯示公共類和成員 -protected 顯示受保護的/公共類和成員 -package 顯示程序包/受保護的/公共類 和成員 (默認) -p -private 顯示所有類和成員 -c 對代碼進行反彙編 -s 輸出內部類型簽名 -sysinfo 顯示正在處理的類的系統信息 (路徑, 大小, 日期, MD5 散列) -constants 顯示靜態最終常量 -classpath <path> 指定查找用戶類文件的位置 -bootclasspath <path> 覆蓋引導類文件的位置
二、JDK內置工具 -jps
1、介紹
jps (Java Virtual Machine Process Status Tool) 顯示當前所有java金城pid的命令
2、命令
jps <options> <hostid>
3、命令集
-q 只輸出進程 ID -m 輸出傳入 main 方法的參數 -l 輸出完全的包名,應用主類名,jar的完全路徑名 -v 輸出jvm參數 -V 輸出通過flag文件傳遞到JVM中的參數 -Joption 傳遞參數到vm,例如:-J-Xms512m
三、JDK內置工具 -jstat
1、介紹
jstat命令可以查看堆內存各部分的使用量,以及加載類的數量。
2、命令
jstat [generalOption | outputOptions vmid [ interval [ s|ms ] [ count ] ] ]
3、命令合集
-gc pid 顯示gc的信息,查看gc的次數,及時間 -gccapacity pid VM分代內存的使用和佔用大小 -gcutil pid 統計gc信息統計 -gcnew pid 年輕代對象的信息 -gcnewcapacity pid 年輕代對象的信息及其佔用量 -gcold pid old代對象的信息 -gcoldcapacity pid old代對象的信息 -gcpermcapacity pid perm對象的信息及其佔用量 -class pid 顯示加載class的數量,及所佔空間等信息 -compiler pid 顯示VM實時編譯的數量等信息 -printcompilation pid 當前VM執行的信息
四、JDK內置工具 - jcmd
1、介紹
看Java進程、導出線程信息、執行GC、還可以進行採樣分析(jmc 工具的飛行記錄器)。
2、命令
jcmd <pid | main class> <command ... | PerfCounter.print | -f file>
3、命令合集
pid help 查看本地的java進程列表,獲取其pid pid VM.uptime 查看 JVM 的啓動時長 pid GC.class_histogram 查看 JVM 的類信息,這個可以查看每個類的實例數量和佔用空間大小。 pid Thread.print 查看 JVM 的Thread Dump pid GC.heap_dump FILE_NAME 查看 JVM 的Heap Dump,注意,如果只指定文件名,默認會生成在啓動 JVM 的目錄裏。 pid VM.system_properties 查看 JVM 的屬性信息 pid VM.flags 查看 JVM 的啓動參數,注意,可以看到 -X 和 -XX 的參數信息 pid VM.command_line 查看 JVM 的啓動命令行 pid GC.run_finalization 對 JVM 執行 java.lang.System.runFinalization(),儘量b別去調用這個對象的finalize方法。 pid GC.run 對 JVM 執行 java.lang.System.gc(),告訴垃圾收集器打算進行垃圾收集,而垃圾收集器進不進行收集是不確定的 PID PerfCounter.print 查看 JVM 的性能
五、JDK內置工具 -jinfo
1、介紹
主要用於打印配置信息,包括命令行參數、系統變量。極少數的情況下,我們可以用其來修改命令行參數。
2、命令
jinfo <option> <pid>
3、命令合集
-gc pid 顯示gc的信息,查看gc的次數,及時間 -gccapacity pid VM分代內存的使用和佔用大小 -gcutil pid 統計gc信息統計 -gcnew pid 年輕代對象的信息 -gcnewcapacity pid 年輕代對象的信息及其佔用量 -gcold pid old代對象的信息 -gcoldcapacity pid old代對象的信息 -gcpermcapacity pid perm對象的信息及其佔用量 -class pid 顯示加載class的數量,及所佔空間等信息 -compiler pid 顯示VM實時編譯的數量等信息 -printcompilation pid 當前VM執行的信息
六、JDK內置工具 - jcmd
1、介紹
看Java進程、導出線程信息、執行GC、還可以進行採樣分析(jmc 工具的飛行記錄器)。
2、命令
jcmd <pid | main class> <command ... | PerfCounter.print | -f file>
3、命令合集
參數說明 pid 對應jvm的進程id executable core 產生core dump文件 [server-id@]remote server IP or hostname 遠程的ip或者hostname,server-id標記服務的唯一性id option no option 輸出全部的參數和系統屬性 -flag name 輸出對應名稱的參數 -flag [+|-]name 開啓或者關閉對應名稱的參數 -flag name=value 設定對應名稱的參數 -flags 輸出全部的參數 -sysprops 輸出系統屬性
七、JDK內置工具 -jinfo
1、介紹
主要用於打印配置信息,包括命令行參數、系統變量。極少數的情況下,我們可以用其來修改命令行參數。
2、命令
jinfo <option> <pid>
3、命令合集
-gc pid 顯示gc的信息,查看gc的次數,及時間 -gccapacity pid VM分代內存的使用和佔用大小 -gcutil pid 統計gc信息統計 -gcnew pid 年輕代對象的信息 -gcnewcapacity pid 年輕代對象的信息及其佔用量 -gcold pid old代對象的信息 -gcoldcapacity pid old代對象的信息 -gcpermcapacity pid perm對象的信息及其佔用量 -class pid 顯示加載class的數量,及所佔空間等信息 -compiler pid 顯示VM實時編譯的數量等信息 -printcompilation pid 當前VM執行的信息
八、JDK內置工具 - jhat
1、介紹
主要是用來分析java堆的命令,可以將堆中的對象以html的形式顯示出來,包括對象的數量,大小等等,並支持對象查詢語言。
2、命令
jhat [ options ] heap-dump-file
3、命令合集
-J< flag > 因爲 jhat 命令實際上會啓動一個JVM來執行, 通過 -J 可以在啓動JVM時傳入一些啓動參數. 例如, -J-Xmx512m 則指定運行 jhat 的Java虛擬機使用的最大堆內存爲 512 MB. 如果需要使用多個JVM啓動參數,則傳入多個 -Jxxxxxx -stack false|true 關閉跟蹤對象分配調用堆棧。如果分配位置信息在堆轉儲中不可用. 則必須將此標誌設置爲 false. 默認值爲 true. -refs false|true 關閉對象引用跟蹤。默認情況下, 返回的指針是指向其他特定對象的對象,如反向鏈接或輸入引用(referrers or incoming references), 會統計/計算堆中的所有對象。 -port port-number 設置 jhat HTTP server 的端口號. 默認值 7000。 -exclude exclude-file 指定對象查詢時需要排除的數據成員列表文件。 例如, 如果文件列出了 java.lang.String.value , 那麼當從某個特定對象 Object o 計算可達的對象列表時, 引用路徑涉及 java.lang.String.value 的都會被排除。 -baseline exclude-file 指定一個基準堆轉儲(baseline heap dump)。 在兩個 heap dumps 中有相同 object ID 的對象會被標記爲不是新的(marked as not being new). 其他對象被標記爲新的(new). 在比較兩個不同的堆轉儲時很有用。 -debug int 設置 debug 級別. 0 表示不輸出調試信息。 值越大則表示輸出更詳細的 debug 信息。 -version 啓動後只顯示版本信息就退出。
九、JDK內置工具 -jinfo
1、介紹
主要用於打印配置信息,包括命令行參數、系統變量。極少數的情況下,我們可以用其來修改命令行參數。
2、命令
jinfo <option> <pid>
3、命令合集
-gc pid 顯示gc的信息,查看gc的次數,及時間 -gccapacity pid VM分代內存的使用和佔用大小 -gcutil pid 統計gc信息統計 -gcnew pid 年輕代對象的信息 -gcnewcapacity pid 年輕代對象的信息及其佔用量 -gcold pid old代對象的信息 -gcoldcapacity pid old代對象的信息 -gcpermcapacity pid perm對象的信息及其佔用量 -class pid 顯示加載class的數量,及所佔空間等信息 -compiler pid 顯示VM實時編譯的數量等信息 -printcompilation pid 當前VM執行的信息
十、JDK內置工具 - jhat
1、介紹
打印出某個java進程(使用pid)內存內的,所有‘對象’的情況(如:產生那些對象,及其數量)。它的用途是爲了展示java進程的內存映射信息,或者堆內存詳情。
2、命令
jmap [ option ] pid (to connect to remote debug server) jmap [ option ] executable core (to connect to remote debug server) jmap [ option ] [server-id@]remote-hostname-or-IP (to connect to remote debug server)
3、命令合集
-histo[:live] <pid> 通過histo選項,打印當前java堆中各個對象的數量、大小。如果添加了live,只會打印活躍的對象。 -dump:[live,]format=b,file=<filename> <pid> 通過-dump選項,把java堆中的對象dump到本地文件,然後使用MAT進行分析。 如果添加了live,只會dump活躍的對象。 -heap <pid> 通過-heap選項,打印java堆的配置情況和使用情況,還有使用的GC算法。 -finalizerinfo <pid> 通過-finalizerinfo選項,打印那些正在等待執行finalize方法的對象。 -permstat <pid> 通過-permstat選項,打印java堆永久代的信息,包括class loader相關的信息,和interned Strings的信息。
十一、JDK內置工具 - jhat
1、介紹
查看堆內各個部分的使用量,以及加載類的數量。使用時,需加上查看進程的進程id,和所選參數。
2、命令
jhat -options
3、命令合集
十二、JDK內置工具 - jconsole
1、介紹
一個內置 Java 性能分析器,可以從命令行或在 GUI shell 中運行。您可以輕鬆地使用 JConsole(或者,它更高端的 “近親” VisualVM )來監控 Java 應用程序性能和跟蹤 Java 中的代碼。
2、命令
windows的bin目錄裏面
3、界面
查看,參看堆內存,非堆內存,內存池的狀況總體內存的分配和使用情況以及不同的GC進行垃圾回收的次數和時間。可以手動進行GC查看內存變化。在分析JAVA內存問題進行調優時候非常有用,你要學習JVM內存模型,之後會發現這裏的每個值都具有意義。 GC的算法和參數對性能有顯著的影響,注意垃圾回收次數、時間、以及partial GC和full GC,調整所使用的不同GC和以及各個GC下的參數,然後在這個視圖下觀察,以得到好的性能。現在流行微服務,同一個服務可能是多臺,所以這個命令更多的使用在測試環境單臺機器上。
十三、JDK內置工具 - jvisualvm
1、介紹
用來監控JVM的運行情況,可以用它來查看和瀏覽Heap Dump、Thread Dump、內存對象實例情況、GC執行情況、CPU消耗以及類的裝載情況
2、命令
windows的bin目錄裏面
3、 界面
VisualVM,能夠監控線程,內存情況,查看方法的CPU時間和內存中的對 象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的).從界面上看還是比較簡潔的,左邊是樹形結構,自動顯示當前本機所運行的Java程序,還可以添加遠程的Java VM,其中括號裏面的PID指的是進程ID。OverView界面顯示VM啓動參數以及該VM對應的一些屬性。Monitor界面則是監控Java堆大小,Permgen大小,Classes和線程數量。