- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java中的jdk命令行工具有哪些
這期內容當中小編將會(huì )給大家帶來(lái)有關(guān)Java中的jdk命令行工具有哪些,文章內容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
jps
命令jps
命令類(lèi)似于linux下的ps命令,但它只用于列出java的進(jìn)程。
首先使用ps命令看下java進(jìn)程:
$ ps aux | grep java root 5601 0.1 22.4 3715428 869352 ? Sl 9月23 87:36 java -jar -Dspring.profiles.active=prod -Dserver.port=8080 -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -Xmn512m -Xss512k -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+DisableExplicitGC -Xloggc:/opt/app/ruoyi-admin/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/app/ruoyi-admin/logs/dump.logs ruoyi-admin.jar root 30418 0.0 0.0 112728 968 pts/0 S+ 21:56 0:00 grep --color=auto java
jps
命令不加任何參數,可以列出java進(jìn)程id及main函數名稱(chēng):$ jps 5601 jar 30536 Jps
-q
可以指定jps只輸出進(jìn)程id:$ jps -q 5601 30604
-m
可以用于輸出傳遞給java進(jìn)程(主函數)的參數jps -m 5601 jar 30682 Jps -m
-l
可以用于輸出主函數的完整路徑$ jps -l 5601 ruoyi-admin.jar 30868 sun.tools.jps.Jps
-v
可以顯示傳遞java虛擬機的參數5601 jar -Dspring.profiles.active=prod -Dserver.port=8080 -Dfile.encoding=UTF-8 -Xms1024m -Xmx1024m -Xmn512m -Xss512k -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+DisableExplicitGC -Xloggc:/opt/app/ruoyi-admin/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/app/ruoyi-admin/logs/dump.logs 31035 Jps -Denv.class.path=.:/usr/local/java/jdk1.8.0_221/lib:/usr/local/java/jdk1.8.0_221/jre/lib -Dapplication.home=/usr/local/java/jdk1.8.0_221 -Xms8m
jstat
命令jstat
命令是一個(gè)可以用于觀(guān)察java應用程序運行時(shí)相關(guān)信息的工具,它的功能非常強大,可以通過(guò)它查看堆信息的詳細情況,基本語(yǔ)法如下:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option
可以由以下值構成:
class:顯示ClassLoad的相關(guān)信息;
compiler:顯示JIT編譯的相關(guān)信息;
gc:顯示和gc相關(guān)的堆信息;
gccapacity:顯示各個(gè)代的容量以及使用情況;
gccause:顯示垃圾回收的相關(guān)信息(通-gcutil, 同時(shí)顯示最后一次或當前正在發(fā)生的垃圾回收的誘因;
gcmetacapacity:顯示metaspace的大小
gcnew:顯示新生代信息;
gcnewcapacity:顯示新生代大小和使用情況;
gcold:顯示老年代和永久代的信息;
gcoldcapacity:顯示老年代的大??;
gcutil:顯示垃圾收集信息;
printcompilation:輸出JIT編譯的方法信息
-t
參數可以在輸出信息前加上一個(gè)Timestamp列,顯示程序的運行時(shí)間
-h
參數可以指定在周期性輸出時(shí),輸出多少行數據后輸出一個(gè)表頭信息
interval
參數用于指定輸出統計數據的周期,單位為毫秒
count
參數用于指定一共輸出多少次數據。
$ jstat -class -t 5601 1000 2 Timestamp Loaded Bytes Unloaded Bytes Time 3127495.0 14324 27006.2 0 0.0 7.19 3127496.2 14324 27006.2 0 0.0 7.19
在-class
的輸出中,
Loaded
表示載入類(lèi)的數量,
Bytes
表示載入類(lèi)的合計大小,
Unloaded
表示卸載類(lèi)的數量,
第2個(gè)Bytes
表示卸載類(lèi)的大小,
Time
表示在加載和卸載類(lèi)上所花的時(shí)間。
JIT
編譯的信息$ jstat -compiler -t 5601 Timestamp Compiled Failed Invalid Time FailedType FailedMethod 3127815.7 19402 0 0 65.39 0
Compiled
:編譯任務(wù)執行的次數
Failed
:編譯失敗的次數
Invalid
:編譯不可用的次數
Time
:編譯的總耗時(shí)
FailedType
:最后一次編譯失敗的類(lèi)型
FailedMethod
:最后一次編譯失敗的類(lèi)名和方法名
$ jstat -gc 5601 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 52416.0 52416.0 353.4 0.0 419456.0 56842.5 524288.0 64566.9 88160.0 84466.4 10452.0 9748.5 254 2.182 4 0.157 2.339
S0C:s0區的大小(KB)
S1C:s1區的大小(KB)
S0U:s0區的使用大小(KB)
S1U:s1區的使用大小(KB)
EC:eden區的大小(KB)
EU:eden區的使用大小(KB)
OC:老年代大小(KB)
OU:老年代使用大小(KB)
MC:元數據區(Metaspace)大小(KB)
MU:元數據區(Metaspace)使用大小(KB)
CCSC:壓縮類(lèi)空間大小(KB)
CCSU:壓縮類(lèi)空間使用大小(KB)
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時(shí)間
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
$ jstat -gccapacity 5601 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 524288.0 524288.0 524288.0 52416.0 52416.0 419456.0 524288.0 524288.0 524288.0 524288.0 0.0 1126400.0 88160.0 0.0 1048576.0 10452.0 254 4
NGCMN:新生代最小容量(KB)
NGCMX:新生代最大容量(KB)
NGC:當前新生代容量(KB)
S0C:第一個(gè)幸存區大小(KB)
S1C:第二個(gè)幸存區的大小(KB)
EC:伊甸園區的大小(KB)
OGCMN:老年代最小容量(KB)
OGCMX:老年代最大容量(KB)
OGC:當前老年代大小(KB)
OC:當前老年代大小(KB)
MCMN:最小元數據容量(KB)
MCMX:最大元數據容量(KB)
MC:當前元數據空間大小(KB)
CCSMN:最小壓縮類(lèi)空間大小(KB)
CCSMX:最大壓縮類(lèi)空間大小(KB)
CCSC:當前壓縮類(lèi)空間大小(KB)
YGC:年輕代gc次數
FGC:老年代GC次數
說(shuō)明:與
-gc
相比,-gccapacity
不僅輸出了各個(gè)代的當前大小,也包含了各個(gè)代的最大值和最小值
$ jstat -gccause 5601 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC 0.67 0.00 19.75 12.32 95.81 93.27 254 2.182 4 0.157 2.339 Allocation Failure No GC
LGCC
:上次gc的原因
GCC
:當前gc的原因
本例中,最近一次gc是由于內存分配失敗引起的,當前時(shí)刻未進(jìn)行g(shù)c.
$ jstat -gcnew 5601 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 52416.0 52416.0 353.4 0.0 6 6 26208.0 419456.0 103801.7 254 2.182
TT
:新生代對象晉升到老年代對象的年齡
MTT
:新生代對象晉升到老年代對象的年齡最大值
DSS
:所需的survivor
區大小
$ jstat -gcnewcapacity 5601 NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 524288.0 524288.0 524288.0 52416.0 52416.0 52416.0 52416.0 419456.0 419456.0 254 4
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當前新生代容量
S0CMX:s0區的最大值(KB)
S0C:當前s0區大小(KB)
S1CMX:s1區的最大值(KB)
S1C:當前s1區大小(KB)
ECMX:eden區最大值(KB)
EC:當前eden大小
YGC:年輕代垃圾回收次數
FGC:老年代回收次數
$ jstat -gcold 5601 MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 88160.0 84466.4 10452.0 9748.5 524288.0 64566.9 254 4 0.157 2.339
$ jstat -gcoldcapacity 5601 OGCMN OGCMX OGC OC YGC FGC FGCT GCT 524288.0 524288.0 524288.0 524288.0 254 4 0.157 2.339
$ jstat -gcutil 5601 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.67 0.00 53.27 12.32 95.81 93.27 254 2.182 4 0.157 2.339
S0:s0區當前使用比例
S1:s1區當前使用比例
E:eden區使用比例
O:老年代使用比例
M:元數據區使用比例
CCS:壓縮使用比例
YGC:年輕代垃圾回收次數
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
jstat
結合 interval
和 count
參數,可以持續觀(guān)察堆使用情況及gc信息,如:
# 間隔1000ms輸出gc回收信息,共輸出5次 jstat -gcutil 5601 1000 5 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.67 0.00 55.27 12.32 95.81 93.27 254 2.182 4 0.157 2.339 0.67 0.00 55.27 12.32 95.81 93.27 254 2.182 4 0.157 2.339 0.67 0.00 55.28 12.32 95.81 93.27 254 2.182 4 0.157 2.339 0.67 0.00 55.28 12.32 95.81 93.27 254 2.182 4 0.157 2.339 0.67 0.00 55.28 12.32 95.81 93.27 254 2.182 4 0.157 2.339
同樣地,上述其他示例也有類(lèi)似的用法。
jinfo
命令jinfo
命令可以用來(lái)查看正在運行的java應用程序的擴展參數,基本語(yǔ)法如下:
jinfo <option> <pid>
其中option可以為以下參數:
-flag<name>
:打印指定java虛擬機的參數值
在很多情況下,java應用程序不會(huì )指定所有的java虛擬機參數。而此時(shí),開(kāi)發(fā)人員可能不知道某一個(gè)具體的java虛擬機參數的認。在這種情況下,可以使用 jinfo
命令,開(kāi)發(fā)人員可以很方便地找到j(luò )ava虛擬機參數的當前值。
$ jinfo -flag MaxTenuringThreshold 5601 -XX:MaxTenuringThreshold=6
jmap
命令jmap
命令是一個(gè)多功能的命令,它可以生成java程序的堆dump文件,也可以查看堆內對象實(shí)例的統計信息、查看classLoader的信息以及finalizer隊列。
$ jmap -histo 5601 num #instances #bytes class name ---------------------------------------------- 1: 319862 32778488 [C 2: 50830 19345024 [I 3: 120919 10764840 [B 4: 201841 8073640 java.util.TreeMap$Entry 5: 253189 6076536 java.lang.String 6: 46302 4074576 java.lang.reflect.Method 7: 90594 2899008 java.util.concurrent.ConcurrentHashMap$Node 8: 61733 2806752 [Ljava.lang.Object; 9: 50356 2014240 java.util.LinkedHashMap$Entry 10: 27163 1987056 [Ljava.util.HashMap$Node; 11: 15304 1710560 java.lang.Class 12: 40517 1296544 java.util.HashMap$Node 13: 23026 1105248 org.aspectj.weaver.reflect.ShadowMatchImpl 14: 19402 1086512 java.util.LinkedHashMap 15: 20779 997392 java.util.HashMap 16: 11205 986040 com.ruoyi.framework.shiro.session.OnlineSession 17: 29536 945152 com..cj.util.LazyString 18: 4046 938672 com.mysql.cj.jdbc.result.ResultSetImpl 19: 39886 893584 [Ljava.lang.Class; 20: 11264 811008 net.sf.ehcache.Element 21: 15705 753840 java.nio.HeapByteBuffer ··· 省略其他輸出
注:-histo 輸出內容較多,建議將內容輸出到文件中。
$ jmap -dump:format=b,file=/home/www/heap.dump 5601 Dumping heap to /home/www/heap.dump ... Heap dump file created
導出堆文件后,可以使用Visual VM
或 MAT
等工具分析。
ClassLoader
信息jmap -clstats 5601 Attaching to process ID 5601, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.221-b11 finding class loader instances .. done. computing per loader stat ..done. please wait.. computing liveness.liveness analysis may be inaccurate ... class_loader classes bytes parent_loader alive? type <bootstrap> 3538 6193214 null live <internal> 0x00000000e3ba0bb8 1 880 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e3d273d0 1 1474 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e15b3158 1 1473 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e3062f00 1 880 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e35eff58 1 1471 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e068b460 1 1473 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e2e04ee8 1 1473 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e339ef30 1 880 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e33a1330 1 1473 0x00000000e0020830 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 0x00000000e3575358 1 1471 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0 ···省略其他輸出 total = 569 13668 22579616 N/A alive=1, dead=568 N/A
$ jmap -finalizerinfo 5601 Attaching to process ID 5601, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.221-b11 Number of objects pending for finalization: 0
jstack命令用于導出java應用程序的線(xiàn)程堆棧,語(yǔ)法為:
jstack [-l] <pid>
-l
用于打印鎖的附加信息。
jstack命令會(huì )在控制臺輸出程序中的所有的鎖信息,可以使用重定向將輸出內容保存到文件中,如:
jstack -l 5601 > ./thread.log
jcmd
命令在jdk1.7后,新增了一個(gè)命令行工具 jcmd
。它是一個(gè)多功能的工具,可以用來(lái)導出堆、查看java進(jìn)程、導出線(xiàn)程信息、執行GC等。
$ jcmd -l 5601 ruoyi-admin.jar 1852 sun.tools.jcmd.JCmd -l
VM.uptime
jcmd 5601 VM.uptime 5601: 3301407.004 s
jstack
)$ jcmd 5601 Thread.print 5601: 2019-10-31 22:17:31 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.221-b11 mixed mode): "Attach Listener" #167 daemon prio=9 os_prio=0 tid=0x00007fcc1001b000 nid=0x5ea0 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE ... 省略其他輸出
jcmd 5601 GC.class_histogram 5601: num #instances #bytes class name ---------------------------------------------- 1: 128273 14782000 [C 2: 34256 3014528 java.lang.reflect.Method 3: 122377 2937048 java.lang.String 4: 88955 2846560 java.util.concurrent.ConcurrentHashMap$Node 5: 7481 2524736 [B 6: 15102 1689552 java.lang.Class 7: 34360 1374400 java.util.LinkedHashMap$Entry ... 省略其他輸出
$ jcmd 5601 GC.heap_dump ~/dump.log 5601: Heap dump file created
GC.heap_dump
接收一個(gè)參數作為堆Dump文件的輸出路徑,得到堆文件后,可以使用MAT或VisualVm等工具進(jìn)行分析。
$ jcmd 5601 VM.system_properties 5601: #Thu Oct 31 22:25:10 CST 2019 java.runtime.name=Java(TM) SE Runtime Environment java.protocol.handler.pkgs=org.springframework.boot.loader sun.boot.library.path=/usr/local/java/jdk1.8.0_221/jre/lib/amd64 java.vm.version=25.221-b11 java.vm.vendor=Oracle Corporation java.vendor.url=http\://java.oracle.com/ ... 省略其他輸出
$ jcmd 5601 VM.flags 5601: -XX:CICompilerCount=2 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/app/ruoyi-admin/logs/dump.logs -XX:InitialHeapSize=1073741824 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=536870912 -XX:MaxTenuringThreshold=6 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=536870912 -XX:OldPLABSize=16 -XX:OldSize=536870912 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ThreadStackSize=512 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
$ jcmd 5601 PerfCounter.print 5601: java.ci.totalTime=66922617199 java.cls.loadedClasses=14326 java.cls.sharedLoadedClasses=0 java.cls.sharedUnloadedClasses=0 java.cls.unloadedClasses=203 java.property.java.class.path="ruoyi-admin.jar" java.property.java.endorsed.dirs="/usr/local/java/jdk1.8.0_221/jre/lib/endorsed" java.property.java.ext.dirs="/usr/local/java/jdk1.8.0_221/jre/lib/ext:/usr/java/packages/lib/ext" java.property.java.home="/usr/local/java/jdk1.8.0_221/jre" java.property.java.library.path="/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib" java.property.java.version="1.8.0_221" ... 省略其他輸出
在這個(gè)輸出中,可以找到所有的性能統計相關(guān)的數據,如活動(dòng)的線(xiàn)程數、活動(dòng)線(xiàn)程峰值等信息。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站