一. jps : 虛擬機(jī)進(jìn)程狀況工具
- 功能:列出正在運(yùn)行的虛擬機(jī)進(jìn)程,并顯示虛擬機(jī)執(zhí)行主類(Main Class, main()函數(shù)所在的類)名稱和這些進(jìn)程的本地虛擬機(jī)唯一ID(Local Virtual Machine Identifier, LVMID)帆卓。其他JDK工具大多需要輸入它查詢到的LVMID來確定要監(jiān)控的是哪一個虛擬機(jī)進(jìn)程稽穆。
- jps命令格式:
jps [ options ] [ hostid ]
jps 可以通過RMI協(xié)議查詢開啟了RMI服務(wù)的遠(yuǎn)程虛擬機(jī)進(jìn)程狀態(tài)冠王,hostid 為RMI注冊表中注冊的主機(jī)名。 - 選項(xiàng)
-q 只輸出LVMID秧骑,省略主類的名稱
-m 輸出虛擬機(jī)進(jìn)程啟動時傳遞給主類 main() 函數(shù)的參數(shù)
-l 輸出主類的全名,如果進(jìn)程執(zhí)行的是Jar包扣囊,輸出Jar的路徑
-v 輸出虛擬機(jī)進(jìn)程啟動時JVM參數(shù)
二. jstat : 虛擬機(jī)統(tǒng)計信息監(jiān)視工具
- 功能:監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具乎折。可以顯示本地或者遠(yuǎn)程虛擬機(jī)進(jìn)程中的類裝載侵歇、內(nèi)存骂澄、垃圾收集、JIT編譯等運(yùn)行數(shù)據(jù)惕虑。
- jstat命令格式
jstat [ option vmid [ interval [ s | ms ] [ count ] ] ]
如果是本地虛擬機(jī)進(jìn)程坟冲,VMID與LVMID是一致的,如果是遠(yuǎn)程虛擬機(jī)進(jìn)程溃蔫,那VMID的格式應(yīng)當(dāng)是 [ protocol: ] [ // ] lvmid [@hostname[ :port ] /servename ]
參數(shù)interval和count代表查詢間隔和次數(shù)健提,如果省略這兩個參數(shù),說明只查詢一次伟叛。假設(shè)需要每250毫秒查詢一次進(jìn)程2746垃圾收集狀況私痹,一共查詢20次,那命令應(yīng)當(dāng)是:
jstat -gc 2764 250 20 - 選項(xiàng)
選項(xiàng)option代表著用戶希望查詢的虛擬機(jī)信息统刮,主要分為3類:類裝載紊遵、垃圾收集、運(yùn)行期編譯狀況侥蒙。
選項(xiàng)作用-class監(jiān)視類裝載暗膜、卸載數(shù)量、總空間以及類裝載所耗費(fèi)的時間-gc監(jiān)視Java堆狀況鞭衩,包括Eden區(qū)学搜、兩個survisor區(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配置信息工具
- 功能:實(shí)時地查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù)
- jinfo命令格式
jinfo [ option ] pid - 選項(xiàng)
通過 jinfo -h 命令獲取詳細(xì)信息
四. jmap: Java內(nèi)存映像工具
- 功能:用于生成堆轉(zhuǎn)儲快照(一般稱為heapdump或dump文件),查詢finalize執(zhí)行隊(duì)列疾嗅、Java堆和永久代的詳細(xì)信息外厂,如空間使用率、當(dāng)前用的是哪種收集器等代承。
- jmap命令格式
jmap [ option ] vmid - 選項(xiàng)
選項(xiàng)作用-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堆詳細(xì)信息,如使用哪種回收器膀估、參數(shù)配置幔亥、分代狀況等。只在Linux/Solaris平臺下有效察纯。-histo顯示堆中對象統(tǒng)計信息紫谷,包括類、實(shí)例數(shù)量捐寥、合計容量-permstat以ClassLoader為統(tǒng)計口徑顯示永久代內(nèi)存狀況笤昨。只在Linux/Solaris平臺下有效。-F當(dāng)虛擬機(jī)進(jìn)程對-dump選項(xiàng)沒有響應(yīng)時握恳,可使用這個選項(xiàng)強(qiáng)制生成dump快照瞒窒。只在Linux/Solaris平臺下有效。 - 例子
jmap -dump:format=b,file=eclipse.bin 3500
5.問題
(1)執(zhí)行jmap -heap命令時乡洼,報如下錯誤:
Attaching to process ID 3991, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process
(2)解決方案
修改/etc/sysctl.d/10-ptrace.conf文件如下:
kernel.yama.ptrace_scope = 1 ---> kernel.yama.ptrace_scope = 0
(即將1改成0)崇裁,然后重啟即可。
五. jhat : 虛擬機(jī)堆轉(zhuǎn)儲快照分析工具
1.功能:Sun JDK 提供 jhat(JVM Heap Analysis Tool)命令與 jmap 搭配使用束昵,來分析 jmap 生成的堆轉(zhuǎn)儲快照拔稳。jhat 內(nèi)置了一個微型的 HTTP/HTML 服務(wù)器,生成 dump 文件的分析結(jié)果后锹雏,可以在瀏覽器中查看巴比。
2.使用步驟
● 使用jhat [ fileName ] 命令分析堆轉(zhuǎn)儲快照文件
● 使用 http://localhost:7000/ 查看分析結(jié)果 (端口在輸出信息中可以找到)
六. jstack: Java堆棧跟蹤工具
- 功能:用于生成虛擬機(jī)當(dāng)前時刻的線程快照(一般稱為threaddump或者javacore文件)。線程快照就是當(dāng)前虛擬機(jī)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時間停頓的原因轻绞,如線程間死鎖采记、死循環(huán)、請求外部資源導(dǎo)致的長時間等待等都是導(dǎo)致線程長時間停頓的常見原因政勃。線程出現(xiàn)停頓的時候通過 jstack 來查看各個線程的調(diào)用堆棧唧龄,就可以知道沒有響應(yīng)的線程到底在后臺做些什么事情,或者等待什么資源奸远。
- jstack命令格式
jstack [ option ] vmid - 選項(xiàng)
選項(xiàng)作用-F當(dāng)正常輸出的請求不被響應(yīng)時既棺,強(qiáng)制輸出線程堆棧-l除堆棧外,顯示關(guān)于鎖的附加信息-m如果調(diào)用到本地方法的話懒叛,可以顯示C/C++的堆棧