Java的命令行工具
工具:位于JDK的bin目錄中
這些程序體積都非常小嚎朽,因為這些命令行工具只是jdk/lib/tools.jar類庫的一層薄包裝而已,主要的功能代碼是在tools類庫中實現(xiàn)的:
jps:虛擬機進程狀況工具氛赐。
可以列出正在運行的虛擬機進程,并顯示虛擬機執(zhí)行主類名稱以及這些進程的本地虛擬機唯一ID(LVMID),可以通過RMI協(xié)議查詢開啟了RMI服務(wù)的遠程虛擬機進程狀態(tài)佛析,hostid為RMI注冊表中的注冊的主機名
命令格式:jps [ options ] ?[ hostid ]
執(zhí)行樣例:
相關(guān)選項:
-q:只輸出LVMID栗精,省略主類的名稱
-m:輸出虛擬機進程啟動時傳遞給主類main()函數(shù)的參數(shù)
-l:輸出主類的全名栅炒,如果進程執(zhí)行的是jar包,輸出jar路徑
-v::輸出虛擬機進程啟動時JVM參數(shù)
jstat:虛擬機統(tǒng)計信息監(jiān)視工具
用于監(jiān)視虛擬機各種運行狀態(tài)信息术羔,可以顯示本地或者遠程虛擬機進程中的類裝載赢赊、內(nèi)存、垃圾收集级历、JIT編譯等運行數(shù)據(jù)
命令格式:jstat [ option ?vmid [ interval [ s|ms ] [ count ] ] ](VMID:虛擬機進程 ?interval:查詢間隔 ?count:查詢次數(shù) 如果省略代表只查詢一次)
執(zhí)行樣例:
選項option代表用戶希望查詢的虛擬機信息释移,主要分為三類:類裝載、垃圾收集寥殖、運行期編譯狀況
具體選項及其作用:
-class:監(jiān)視類裝載玩讳、卸載數(shù)量涩蜘、總空間以及類裝載所耗費的時間
-gc:監(jiān)視Java堆狀況,包括Eden區(qū)熏纯、兩個Survivor區(qū)同诫、老年代、永久代等的容量樟澜、已用空間误窖、GC時間合計等信息
-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編譯的方法
jinfo:java配置信息工具
用于實時地查看和調(diào)整虛擬機各項參數(shù)租冠。
命令格式:jinfo [ option ] pid
相關(guān)選項:
-flag ?查詢系統(tǒng)參數(shù)默認值 ? ??
-v ? 查看虛擬機啟動時顯示指定的參數(shù)列表
-flag [ +|- ] name或者-flag name=value ?可以修改一部分運行期可寫的虛擬機參數(shù)值
執(zhí)行樣例:
jmap:Java內(nèi)存映像工具
用于生成堆轉(zhuǎn)儲快照(一般稱為heapdump或dump文件),還可以查詢finalize執(zhí)行隊列、Java堆和永久代的詳細詳細损趋。
命令格式:jmap [ option ] vmid
相關(guān)選項:
-dump:生成Java堆轉(zhuǎn)儲快照蘑辑,格式為:-dump:[live ]format=b, file=<filename>,其中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平臺下有效
執(zhí)行樣例:
jhat:虛擬機堆轉(zhuǎn)儲快照分析工具
與jmap搭配使用,來分析jmap生成的堆轉(zhuǎn)儲快照贾惦。jhat內(nèi)置了一個微型的HTTP/HTML服務(wù)器胸梆,生成dump文件的分析結(jié)果后,可以在瀏覽器中查看须板。但 一般不會直接用jhat命令直接分析dump文件碰镜,因為分析工作比較耗時且耗費硬件資源,所以一般會比dump文件復(fù)制到其他機器運行习瑰。各個虛擬機產(chǎn)生的映像文件格式并不一致绪颖,所以分析工具不能通用
執(zhí)行樣例:
屏幕提示“Server is ready”后,在瀏覽器輸入http://localhost:7000/就可以看到分析結(jié)果
jstack:Java堆棧跟蹤工具
用于生成虛擬機當(dāng)前時刻的線程快照(一般稱為threaddump或者Javacore文件)甜奄。線程快照就是當(dāng)前虛擬機內(nèi)每一條線程正在正在執(zhí)行的方法堆棧的集合柠横。生成線程快照的主要目的就是定位線程出現(xiàn)長時間停頓的常見原因窃款,通過jstack來查看各個線程的調(diào)用堆棧,就可以知道沒有響應(yīng)的線程到底在后臺做什么事情牍氛,或者調(diào)用什么資源晨继。
相關(guān)選項:
-F:當(dāng)正常輸出的請求不被響應(yīng)時,強制輸出線程堆棧
-l:除堆棧外搬俊,顯示關(guān)于鎖的附加信息
-m:如果調(diào)用本地方法的話紊扬,可以顯示C/C++的堆棧
執(zhí)行樣例:
HSDIS:JIT生成代碼反匯編的插件
用于將HotSpot虛擬機JIT編譯器動態(tài)生成的本地代碼還原為匯編代碼輸出,同時生成大量的注釋