進入JDK安裝目錄java
cd $JAVA_HOME/bin ls
輸出linux
appletviewer javah jjs jvisualvm schemagen extcheck javap jmap keytool serialver idlj javapackager jmc native2ascii servertool jar jcmd jps orbd tnameserv jarsigner jconsole jrunscript pack200 unpack200 java jdb jsadebugd policytool wsgen javac jdeps jstack rmic wsimport javadoc jhat jstat rmid xjc javafxpackager jinfo jstatd rmiregistry
工具命令spring
名稱 | 主要做用 |
---|---|
jps | JVM Process Status Tool,顯示指定系統內全部的HotSpot虛擬機進程 |
jstat | JVM Statistics Monitoring Tool,用於收集HotSpot虛擬機各方面的運行數據 |
jinfo | Configuration Info for Java,顯示虛擬機配置信息 |
jmap | Memory Map for Java,生成虛擬機的內存轉出快照(heapdump文件) |
jhat | JVM Heap Dump Browser,分析heapdump文件,能夠在瀏覽器查看結果 |
jstack | stack trace for java,顯示虛擬機的線程快照 |
jconsole | Java監視與管理控制檯 |
jvisualvm | 多合一故障處理工具 |
jps
輸出瀏覽器
1794 Jps 1410 1478 Launcher ---> 這是IDEA工具啓動的服務 1479 DemoStartApplication ---> 這是目標Java服務 1230 Bootstrap
能夠得知,當前的java服務的本地虛擬機惟一ID(LVMID)服務器
選項 | 做用 |
---|---|
-q | 只輸出LVMID |
-m | 輸出虛擬機進程啓動時傳遞給主類main()函數的參數 |
-l | 輸出主類全名,若是進程執行的事jar包,輸出jar路徑 |
-v | 輸出虛擬機進程啓動時JVM參數 |
比較經常使用的是 jps
和jps -v
微信
# option=操做,interval=間隔時間,count=操做次數 jstat [option] vmid [interval] [count]
例如app
jstat -gc 1479 250 2
輸出socket
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 41984.0 41472.0 0.0 0.0 810496.0 130073.9 271872.0 53990.9 71552.0 67042.8 8320.0 7480.3 19 0.259 5 0.845 1.104 41984.0 41472.0 0.0 0.0 810496.0 130073.9 271872.0 53990.9 71552.0 67042.8 8320.0 7480.3 19 0.259 5 0.845 1.104
常見參數函數
選項 | 做用 |
---|---|
-class | 類裝載數量、卸載數量、總空間以及類狀態所消耗時間 |
-gc | 監視Java堆容量情況,包括Eden、survivor、老年代、永久代等 |
-gccapacity | 監視Java堆最大、最小空間 |
-gcutil | 關注已使用空間佔總空間的百分比 |
-gccause | 相似gcutil,額外輸出上次GC的緣由 |
-gcnew | 新生代GC情況 |
-gcnewcapacity | 與-gcnew相似,輸出主要關注使用到的最大、最小空間 |
-gcold | 老年代GC情況 |
-gcoldcapacity | 與-gcold相似,輸出主要關注使用到的最大、最小空間 |
-gcpermcapacity | 輸出永久代使用到的最大、最小空間 |
-compiler | 輸出JIT編譯過的方法和耗時 |
-printcompilation | 輸出已經被JIT編譯的方法 |
-gcmetacapacity | 元數據空間統計 |
實時查看和調整虛擬機各項參數。工具
選項 | 做用 | 案例 |
---|---|---|
-flag | 調整虛擬機參數 | jinfo -flag +PrintGCDetails 1479 |
-flags | 查看指定進程全部參數 | jinfo -flags 1479 |
-sysprops | 打印虛擬機進程系統內容 | jinfo -sysprops 1479 |
無參 | 打印全部 | jinfo 1479 |
例如
jinfo -flags 1479
輸出
Attaching to process ID 1479, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.144-b01 Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:+ManagementServer -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+TraceClassLoading -XX:+TraceClassUnloading -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51774,suspend=y,server=n -Dvisualvm.id=12693776008746 -Dserver.port=9988 -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=51773 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8
用於生成堆轉儲快照
命令以下
選項 | 做用 |
---|---|
-dump | 生成堆轉儲快照,格式爲-dump:[live,]format=b,file=<filename>,不建議使用 |
-finalizerinfo | 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象 |
-heap | 顯示java堆詳細信息,回收器種類、參數配置、分代情況等 |
-histo | 顯示堆中對象統計信息,包括類、實例數量、合計容量,會先觸發GC,再統計信息,不建議使用 |
-permstat | 查看永久代內存狀態,比較耗時,會暫停應用,不建議使用 |
-F | 強制生成dump快照,當-dump失效時,再使用此命令 |
例如
jmap -dump:format=b,file=/Users/gy/Desktop/test 1479
輸出(成功) - 輸出的文件比較大,我這裏有320M
Dumping heap to /Users/gy/Desktop/test ... Heap dump file created
輸出(失敗) - 能夠看出,沒有權限訪問,給目錄權限或者換個有權限的目錄。
Dumping heap to /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/test ... Permission denied
虛擬機堆轉儲快照分析工具,這裏分析jmap堆轉儲快照的文件
jhat /Users/gy/Desktop/test
輸出
Reading from /Users/gy/Desktop/test... Dump file created Tue Aug 28 15:59:30 CST 2018 Snapshot read, resolving... Resolving 3208138 objects... Chasing references, expect 641 dots....................... Eliminating duplicate references.......................... Snapshot resolved. Started HTTP server on port 7000 Server is ready.
瀏覽器訪問 http://localhost:7000
Java堆棧跟蹤工具,生成虛擬機當前時刻的線程快照(當前虛擬機內每一條線程正在執行的方法堆棧集合)
主要目的:定位線程出現長時間停頓的緣由,如線程間死鎖
、死循環
、請求外部資源致使的長時間等待
等。
選項 | 做用 | 案例 |
---|---|---|
-m | 若是調用本地方法,則顯示C/C++的堆棧 | jstack -m 1479 |
-l | 除堆棧外,顯示關於鎖的附加信息 | jstack -l 1479 |
-F | 當正常輸出的請求不被響應時,強制輸出線程堆棧 | jstack -F 1479 |
# 啓動 ./jconsole
VM 概要 2018年8月28日 星期二 下午01時59分33秒 CST 鏈接名稱: pid: 1479 com.raising.modules.DemoStartApplication 虛擬機: Java HotSpot(TM) 64-Bit Server VM版本 25.144-b01 供應商: Oracle Corporation 名稱: 1479@marshaldeMacBook-Pro.local 運行時間: 1 小時 47 分鐘 進程 CPU 時間: 49.067 秒 JIT 編譯器: HotSpot 64-Bit Tiered Compilers 總編譯時間: 3.258 秒 活動線程: 98 峯值: 101 守護程序線程: 34 啓動的線程總數: 176 已加裝當前類: 11,092 已加載類總數: 11,505 已卸載類總數: 413 當前堆大小: 129,701 KB 最大堆大小: 3,728,384 KB 提交的內存: 1,123,840 KB 暫掛最終處理: 0對象 垃圾收集器: 名稱 = 'PS MarkSweep', 收集 = 5, 總花費時間 = 0.844 秒 垃圾收集器: 名稱 = 'PS Scavenge', 收集 = 19, 總花費時間 = 0.259 秒 操做系統: Mac OS X 10.13.3 體系結構: x86_64 處理程序數: 8 提交的虛擬內存: 10,287,160 KB 總物理內存: 16,777,216 KB 空閒物理內存: 622,636 KB 總交換空間: 1,048,576 KB 空閒交換空間: 1,011,968 KB VM 參數: ... 類路徑: ... 庫路徑: ... 引導類路徑: ...
https://my.oschina.net/gmarshal
歡迎關注個人我的微信訂閱號:(聽說這個頭像程序猿專用)