JVM-監控命令(5)

工具是知識技能的一層包裝。在jdk的bin中,除了java.exe,javac.exe,還有不少用於監視和處理的工具,並且這些工具都是基於jdk/lib/tools.jar來實現的。 「採用Java代碼來實現這些監控工具是有特別用意的:當應用程序部署到生產環境後,不管是直接接觸物理服務器仍是遠程Telnet到服務器上均可能會受到限制。藉助tools.jar類庫裏面的接口,咱們能夠直接在應用程序中實現功能強大的監控分析功能

1、jps 查看虛擬機的進程情況

jps(JVM process status) 做用單一,「列出正在運行的虛擬機進程,並顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機惟一ID(Local Virtual Machine Identifier,LVMID」html

jps[options][hostid] 命令格式
 jps -l 輸出主類的全名
 jps -v 查看jvm的全部的參數

2、 jstat 虛擬機統計信息監視工具

jstat(jvm statistics monitoring tool)虛擬機統計信息監控的工具,「它能夠顯示本地或者遠程[1]虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形界面,只提供了純文本控制檯環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具」.java

「使用jstat工具在純文本狀態下監視虛擬機狀態的變化」數據庫

「jstat[option vmid[interval[s|ms][count]]]」  option,vmID,interval 查詢的間隔,count 查詢的次數

「假設須要每250毫秒查詢一次進程2764垃圾收集情況,一共查詢20次,那命令應當是: jstat-gc 2764 250 20」瀏覽器

-gc 監視jvm中堆的狀況 -gcutil 更多的關注的是佔內存的百分比 -gcold 關注老年代的gc狀況 -compile jit編譯過的方法服務器

「D:\Develop\Java\jdk1.6.0_21\bin>jstat-gcutil 2764
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 6.20 41.42 47.20 16 0.105 3 0.472 0.577
查詢結果代表:這臺服務器的新生代Eden區(E,表示Eden)使用了6.2%的空間,兩個Survivor區(S0、S1,表示Survivor0、Survivor1)裏面都是空的,老年代(O,表示Old)和永久代(P,表示Permanent)則分別使用了41.42%和47.20%的空間。程序運行以來共發生Minor GC(YGC,表示Young GC)16次,總耗時0.105秒,發生Full GC(FGC,表示Full GC)3次,Full GC總耗時(FGCT,表示Full GC Time)爲0.472秒,全部GC總耗時(GCT,表示GC Time)爲0.577秒

3、jinfo 查看虛擬機各項參數

jinfo(configuration info for java)做用是實時地查看和調整虛擬機各項參數」 「jps命令的-v參數能夠查看虛擬機啓動時顯式指定的參數列表,但若是想知道未被顯式指定的參數的系統默認值,除了去找資料外,就只能使用jinfo的-flag選項進行查詢了」網絡

jinfo還可使用-sysprops選項把虛擬機進程的System.getProperties()的內容打印出來」eclipse

命令格式:jinfo[option]pidjvm

「查詢CMSInitiatingOccupancyFraction參數值。
C:\>jinfo-flag CMSInitiatingOccupancyFraction 1444
-XX:CMSInitiatingOccupancyFraction=85」

4、jmap 內存映像工具

jmap(Memory Map for Java)命令用於生成堆轉儲快照(通常稱爲heapdump或dump文件) 「map的做用並不只僅是爲了獲取dump文件,它還能夠查詢finalize執行隊列、Java堆和永久代的詳細信息」函數

「3500是經過jps命令查詢到的LVMID。」
「jmap-dump:format=b,file=eclipse.bin 3500
Dumping heap to C:\Users\IcyFenix\eclipse.bin……
Heap dump file created」

5、jhat 堆轉儲分析工具

jhat(JVM heap analysis tool),與jmap來一塊兒進行使用,用來分析用jmap來生成的堆轉儲快照。工具

jhat中自帶一個小型的http/html的服務器,那麼在生成了dump文件的分析結構之後,能夠去瀏覽器中去看

可是jhat通常不用,一方面是由於命令行 ,另外一方面是由於分析是一個麻煩的事情,消耗大量的硬件資源

6、 jstack 堆棧跟蹤工具

jstack(stack trace for java)「用於生成虛擬機當前時刻的線程快照(通常稱爲threaddump或者javacore文件) 「線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程間死鎖、死循環、請求外部資源致使的長時間等待等都是致使線程長時間停頓的常見緣由。線程出現停頓的時候經過jstack來查看各個線程的調用堆棧,就能夠知道沒有響應的線程到底在後臺作些什麼事情,或者等待着什麼資源。」

7、「HSDIS:JIT生成代碼反彙編」

「在Java虛擬機規範中,詳細描述了虛擬機指令集中每條指令的執行過程、執行先後對操做數棧、局部變量表的影響等細節」

8、jconsole

jconsole(java Monitoring and Management console)基於JMX的可視化和管理的工具 「概述」、「內存」、「線程」、「類」、「VM摘要」、「MBean」,「概述」頁籤顯示的是整個虛擬機主要運行數據的概覽,其中包括「堆內存使用狀況」、「線程」、「類」、「CPU使用狀況」4種信息的曲線圖,這些曲線圖是後面「內存」、「線程」、「類」頁籤的信息彙總」

「若是上面的「內存」頁籤至關於可視化的jstat命令的話,「線程」頁籤的功能至關於可視化的jstack命令,遇到線程停頓時可使用這個頁籤進行監控分析」

其中「jstack命令的時候提到過線程長時間停頓的主要緣由主要有:等待外部資源(數據庫鏈接、網絡資源、設備資源等)、死循環、鎖等待(活鎖和死鎖」

9、 visualVM 多合一故障處理工具

「VisualVM(All-in-One Java Troubleshooting Tool)是到目前爲止隨JDK發佈的功能最強大的運行監視和故障處理程序」

相關文章
相關標籤/搜索