java命令行选项6_6.jdk命令行工具
名稱
主要功能
jps
JVM Process Status Tool,顯示指定系統(tǒng)內(nèi)所有HotSpot虛擬機進程
jstat
JVM Statistics Minitoring Tool,用于收集HotSpot虛擬機各方面的運行數(shù)據(jù)
jinfo
Configuration Info for Java,顯示虛擬機配置信息
jmap
Memory Map for Java,生成虛擬機的內(nèi)存轉(zhuǎn)儲快照(heapdump)文件
jhat
JVM Heap Dump Browser,用于分析heapdump文件,它會建立一個HTTP/HTML服務(wù)器,讓用戶可以在瀏覽器上查看分析結(jié)果
jstack
Stack Trace for Java,顯示虛擬機的線程快照
jps:虛擬機進程狀況工具
JDK的很多小工具的名稱都參考了Unix命令的命名方式,jps(JVM Process Status Tool)是其中的典型。除了名字像Unix的ps命令外,功能也和ps類似:可以列出正在運行的虛擬機進程,并顯示虛擬機執(zhí)行主類(Main Class,main()函數(shù)所在的類)的名稱,以及這些進程的本地虛擬機的唯一ID(LVMID,Local Virtual Machine Identifier)。雖然功能比較單一,但它是使用頻率最高的JDK命令行工具,因為其他JDK工具大多需要輸入它查詢到的LVMID來確定要監(jiān)控的 是哪一個虛擬機進程。對于本地虛擬機進程來說,LVMID與操作系統(tǒng)的進程ID(PID,Process Identifier)是一致的,使用Windows的任務(wù)管理器或Unix的ps命令也可以查詢到虛擬機進程的LVMID,但如果使用了多個虛擬機進 程,無法根據(jù)進程名稱定位時,那就只能依賴jps命令顯示主類的功能區(qū)才能區(qū)分了。
jps命令格式:
jps [option] [hostid]
jps執(zhí)行樣例:
1
2
3
4
C:\Users\Administrator>jps?-l
5828?D:\Work\Develop\SpringToolSuite\springsource\sts-3.3.0.RELEASE\\plugins
/org
.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
5680?sun.tools.jps.Jps
jps可以通過RMI協(xié)議查詢開啟了RMI服務(wù)的遠程虛擬機進程狀態(tài),hostid為RMI注冊表中注冊的主機名。jps的其他常用選項見下表
選項
作用
-q
只輸出LVMID,省略主類的名稱
-m
輸出虛擬機進程啟動時傳遞給主類的main()函數(shù)的參數(shù)
-l
輸出主類的全名,如果進程執(zhí)行的是jar包,輸出jar路徑
-v
輸出虛擬機進程啟動時JVM參數(shù)
jstat:虛擬機統(tǒng)計信息監(jiān)控工具
jstat(JVM Statistics Monitoring Tool)是用于監(jiān)控虛擬機各種運行狀態(tài)信息的命令行工具。它可以顯示本地或遠程虛擬機進程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行數(shù)據(jù),在沒有 GUI圖像界面,只提高了純文本控制臺環(huán)境的服務(wù)器上,它將是運行期定位虛擬機性能問題的首選工具。
jstat命令格式:
jstat [option vmid [interval[s|ms] [count]] ]
對于命令格式中的VMID與LVMID需要特別說明下:如果是本地虛擬機進程,VMID和LVMID是一致的,如果是遠程虛擬機進程,那VMID的格式應(yīng)當(dāng)是:
[protocol:][//] lvmid [@hostname[:port]/servername]
參數(shù)interval和count代表查詢間隔和次數(shù),如果省略這兩個參數(shù),說明只查詢一次。假設(shè)需要每250毫秒查詢一次進程5828垃圾收集狀況,一共查詢5次,那命令行如下:
jstat?-gc?5828?250?5
選項option代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載、垃圾收集和運行期編譯狀況,具體選項及租用參見下表:
選項
作用
-class
監(jiān)視類裝載、卸載數(shù)量、總空間及類裝載所耗費的時間
-gc
監(jiān)視Java堆狀況,包括Eden區(qū)、2個Survivor區(qū)、老年代、永久代等的容量
-gccapacity
監(jiān)視內(nèi)容與-gc基本相同,但輸出主要關(guān)注Java堆各個區(qū)域使用到的最大和最小空間
-gcutil
監(jiān)視內(nèi)容與-gc基本相同,但輸出主要關(guān)注已使用空間占總空間的百分比
-gccause
與-gcutil功能一樣,但是會額外輸出導(dǎo)致上一次GC產(chǎn)生的原因
-gcnew
監(jiān)視新生代GC的狀況
-gcnewcapacity
監(jiān)視內(nèi)容與-gcnew基本相同,輸出主要關(guān)注使用到的最大和最小空間
-gcold
監(jiān)視老年代GC的狀況
-gcoldcapacity
監(jiān)視內(nèi)容與——gcold基本相同,輸出主要關(guān)注使用到的最大和最小空間
-gcpermcapacity
輸出永久代使用到的最大和最小空間
-compiler
輸出JIT編譯器編譯過的方法、耗時等信息
-printcompilation
輸出已經(jīng)被JIT編譯的方法
舉個例子:
1
2
3
C:\Users\Administrator>jstat?-gcutil?5828
S0?????S1?????E??????O??????P?????YGC?????YGCT????FGC????FGCT?????GCT
0.00???0.00???1.82??52.18??99.91????329????4.894???269???80.244???85.139
這是我監(jiān)控到我的eclipse的內(nèi)存狀況。查詢結(jié)果表明:新生代Eden區(qū)(E,表示Eden)使用了1.82%的空間,兩個Survivor區(qū) (S0、S1,表示Survivor0、Survivor1)里面都是空的,老年代(O,表示Old)和永久代(P,表示Permanent)則分別使用 了52.18%和99.91%的空間。程序運行以來共發(fā)生Minor GC(YGC,Young GC)329次,總耗時(YGCT,Young GC Time)4.894秒,發(fā)生Full GC(FGC)269次,總耗時(FGCT)80.244秒,所有GC總耗時(GCT)85.139秒。
使用jstat工具在純文本狀態(tài)下監(jiān)視虛擬機狀態(tài)的變化,確實不如后面將會提到的VisualVM等可視化的監(jiān)視工具直接以圖表展現(xiàn)的那樣直觀。但很多服務(wù)器管理員都習(xí)慣了在文本控制臺共組哦,直接在控制臺中使用jstat命令已然是一種常用 的監(jiān)控方式。
jinfo: Java配置信息工具
jinfo(Configuration Info for Java)的作用是實時地查看和調(diào)整虛擬機的各項參數(shù)。使用jps的命令的-v參數(shù)可以查看虛擬機啟動時顯示指定的參數(shù)列表,但如果想知道未被顯示指定的 參數(shù)的系統(tǒng)默認值,除了去找資料外,就只能使用jinfo的-flag選項進行查詢了(如果只限于JDK1.6或以上版本的話,使用java -XX:+PrintFlagsFinal查看參數(shù)默認值也是一個很好的選擇),jinfo還可以使用-sysprops選項把虛擬機進程的 System.getProperties()的內(nèi)容打印出來。這個命令在JDK1.5時期已經(jīng)隨著Linux版的JDK發(fā)布,當(dāng)時只提供了信息查詢的功 能,JDK1.6之后,jinfo在Windows和Linux平臺都有提供,并且加入了運行期修改參數(shù)的能力,可以使用-flag[+|-]name或 -flag name=valule修改一部分運行期可寫的虛擬機參數(shù)值。JDK1.6中,jinfo對于Windows平臺的功能仍然有較大的限制,只提供了最基本 的-flag選項。
jinfo命令格式:
jinfo [option] pid
執(zhí)行樣例:查詢CMSInitiatingOccupancyFraction參數(shù)值。
1
2
C:\Users\Administrator>jinfo?-flag?CMSInitiatingOccupancyFraction
5828
-XX:CMSInitiatingOccupancyFraction=-
1
jmap: Java內(nèi)存映像工具
jmap(Memory Map for Java)命令用于生產(chǎn)堆轉(zhuǎn)儲快照(一般稱為heapdump或dump文件)。如果不使用jmap命令,要向獲取Java堆轉(zhuǎn)儲快照還有一些比較”暴力 “的手段:譬如-XX:+HeapDumpOnOutOfMemoryError參數(shù),可以讓虛擬機在OOM異常出現(xiàn)之后自動生生成dump文件,通過 -XX:+HeapDumpOnCtrlBreak參數(shù)則可以使用[Ctrl]+[Break]鍵讓虛擬機生成dump文件,又或者在Linux系統(tǒng)下通 過Kill -3命令發(fā)送進程退出信號”恐嚇“一下虛擬機,也能拿到dump文件。
jmap的作用并不僅僅是為了獲取dump文件,它還可以查詢finalize執(zhí)行隊列,Java堆和永久代的詳細信息,如空間使用率、當(dāng)前用的是那種收集器等。
和jinfo命令一樣,jmap有不少功能在Windows平臺下是受限的,除了生成dump文件的-dump選項和用于查看每個類的實例、空間占用統(tǒng)計的-histo選項所有操作系統(tǒng)都提供外,其余選項只能在Linux/Solaris下使用。
jmap命令格式:
jmap [option] vmid
option選項合法值與具體含義:
選項
作用
-dump
生成Java堆轉(zhuǎn)儲快照。格式為:-dump:[live,]format=b,file=,其中l(wèi)ive子參數(shù)說明是否只dump出存活的對象
-finalizerinfo
顯示在F-Queue中等待Finalizer線程執(zhí)行finalize()方法的對象。只在Linux/Solaris平臺下有效
-heap
顯示Java堆詳細信息,如使用哪種回收器、參數(shù)配置、分代狀況等。只在Linux/Solaris平臺下有效
-histo
顯示堆中對象統(tǒng)計信息,包括類、實例數(shù)量和合計容量
-permstat
以ClassLoader為統(tǒng)計口徑顯示永久代內(nèi)存狀態(tài)。只在Linux/Solaris平臺下有效
-F
當(dāng)虛擬機進程對-dump選項沒有響應(yīng)時,可使用這個選項強制生成dump快照。只在Linux/Solaris平臺下有效
樣例:
1
2
3
C:\Users\Administrator>jmap?-dump:
format
=b,
file
=eclipse.bin?5828
Dumping?heap?to?C:\Users\Administrator\eclipse.bin?...
Heap?dump
file
created
這是使用jmap生成一個正在運行的Eclipse的dump快照文件的例子,5828為jps查詢到的LVMID。
jhat:虛擬機堆轉(zhuǎn)儲快照分析工具
Sun JDK提供了jhat(JVM Heap Analysis Tool)命令與jmap搭配使用,來分析jmap生成的堆轉(zhuǎn)儲快照。jhat內(nèi)置了一個微型的HTTP/HTML服務(wù)器,生成dump文件的分析結(jié)果 后,可以在瀏覽器中查看,不過實事求是地說,在實際工作中,除非真的沒有別的工具可用,否則一般不會去直接使用jhat命令來分析demp文件,主要原因 有二:意識一般不會在部署應(yīng)用程序的服務(wù)器上直接分析dump文件,即使可以這樣做,也會盡量將dump文件拷貝到其他機器上進行分析,因為分析工作時一 個耗時且消耗硬件資源的過程,既然都要在其他機器上進行,就沒必要收到命令行工具的限制了。另外一個原因是jhat的分析功能相對來說很簡 陋,VisualVM以及專門分析dump文件的Eclipse Memory Analyzer、IBM HeapAnalyzer等工具,都能實現(xiàn)比jhat更強大更專業(yè)的分析功能。
jstack: Java堆棧跟蹤工具
jstack(Stack Trace for Java)命令用于生成虛擬機當(dāng)前時刻的線程快照(一般稱為threaddump或javacore文件)。線程快照就是當(dāng)前虛擬機內(nèi)每一條線程正在執(zhí)行 的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時間停頓的原因,如線程間死鎖、死循環(huán)、請求外部資源導(dǎo)致的長時間等待等都是導(dǎo)致線程長時間停 頓的常見原因。線程出現(xiàn)停頓的時候通過jstack來查看各個線程的調(diào)用堆棧,就可以知道沒有響應(yīng)的線程到底在后臺做些什么事情,或者等待著什么資源。
jstack命令格式:
jstack [option] vmid
option選項的合法值與具體意義如下:
選項
作用
-F
當(dāng)正常輸出的請求不被響應(yīng)時,強制輸出線程堆棧
-l
除堆棧外,顯示關(guān)于鎖的附加信息
-m
如果調(diào)用到本地方法的話,可以顯示C/C++的堆棧
總結(jié)
以上是生活随笔為你收集整理的java命令行选项6_6.jdk命令行工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java能够运行的原理_JAVA程序运行
- 下一篇: mysql函数封装_Mysql对文件操作