JVM工具

在JAVA開發與運維中,常常會碰見一些須要監控JVM性能的問題。例如
* 內存不足
* 線程死鎖
* java進程消耗CPU太高html

 

jps

能夠輸出並修改運行時的java 進程的opts。用處比較簡單,用於輸出JAVA系統參數及命令行參數java

命令格式:
jps [ options ]
options : 
-m 輸出傳遞給main方法的參數,若是是內嵌的JVM則輸出爲null。
-l 輸出應用程序主類的完整包名,或者是應用程序JAR文件的完整路徑。
-v 輸出傳給JVM的參數。算法

 

jinfo

用來查看正在運行的java應用程序的擴展參數(JVM中-X標示的參數);支持在運行時修改部分參數。
格式
     jinfo [ option ] pid
     jinfo [ option ] executable core 編程

參數說明
     pid  對應jvm的進程id
     executable core 產生core dump文件設計模式

options:
     no option   輸出所有的參數和系統屬性
     -flag  name  輸出對應名稱的參數
     -flag [+|-]name  開啓或者關閉對應名稱的參數
     -flag name=value  設定對應名稱的參數
     -flags  輸出所有的參數
     -sysprops  輸出系統屬性緩存

使用 java -XX:+PrintFlagsFinal -version|grep manageable 能看到JVM中哪些flag能夠被jinfo動態修改
舉例 : 正在運行的JVM中動態開啓GC日誌功能:
jinfo -flag +PrintGCDetails pid
jinfo -flag +PrintGC pid網絡

 

jstack

主要用來查看Java線程的調用堆棧的,能夠用來分析線程問題(如 死鎖 CPU彪高,程序卡住,系統無響應,居家必備之良藥)

格式
jstack [ option ] pid
jstack [ option ] executable core
options:
    -F  強制dump線程堆棧信息. 用於進程hung住, jstack 命令沒有響應的狀況
    -m  同時打印java和本地(native)線程棧信息,m是mixed mode的簡寫
    -l  打印鎖的額外信息oracle

線程狀態
  咱們使用jstack命令查看線程堆棧信息時可能會看到的線程的幾種狀態:

NEW,未啓動的。不會出如今Dump中。
RUNNABLE,在虛擬機內執行的。運行中狀態,可能裏面還能看到locked字樣,代表它得到了某把鎖。
BLOCKED,受阻塞並等待監視器鎖。被某個鎖(synchronizers)給block住了。
WATING,無限期等待另外一個線程執行特定操做。等待某個condition或monitor發生,通常停留在park(), wait(), sleep(),join() 等語句裏。
TIMED_WATING,有時限的等待另外一個線程的特定操做。和WAITING的區別是wait() 等語句加上了時間限制 wait(timeout)。
TERMINATED,已退出的。
https://www.cnblogs.com/kongzhongqijing/articles/3630264.html

jmap

能夠輸出全部內存中對象的,甚至能夠將VM 中的heap,以二進制輸出成文本。打印出某個java進程內存使用情況,以及對象數量。
格式
       jmap [ option ] pid
       jmap [ option ] executable core運維

options:
-dump:[live,]format=b,file= 
使用hprof二進制形式,輸出jvm的heap內容到文件. live子選項是可選的,假如指定live選項,
那麼只輸出活的對象到文件. 
-finalizerinfo 打印正等候回收的對象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用狀況.
-histo[:live] 打印每一個class的實例數目,內存佔用,類全名信息.加上live子參數,只統計活的對象數量. 
-clstats 打印類加載器的統計信息(取代了在JDK8以前打印類加載器信息的permstat)
-F 強迫.在pid沒有相應的時候使用-dump或者-histo參數. 在這個模式下,live子參數無效. 
-J 傳遞參數給jmap啓動的jvm.jvm

 

jhat

主要是用來分析java堆的命令,能夠將堆中的對象以html的形式顯示出來,包括對象的數量,大小等等,並支持對象查詢語言。

導出堆 : 
1) jmap 導出

2) -XX:+HeapDumpOnOutOfMemoryError 
3) hprof 
https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html 
http://www.javashuo.com/article/p-enteeqlj-bv.html

 

jstat

用來監視VM內存內的各類堆和非堆的大小及其內存使用量。詳細查看堆內各個部分的使用量,以及加載類的數量。
格式
 jstat - [-t] [-h] [ []]

-t  能夠在打印的列加上Timestamp列,用於顯示系統運行的時間
-h  能夠在週期性數據數據的時候,能夠在指定輸出多少行之後輸出一次表頭
interval    間隔時間,單位爲毫秒
 count  用於指定輸出多少次記錄,缺省則會一直打印

https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html 
https://www.jianshu.com/p/213710fb9e40
http://www.javashuo.com/article/p-enteeqlj-bv.html

 

jconsole

生產環境不要開放

它用於鏈接正在運行的本地或者遠程的JVM,對運行在java應用程序的資源消耗和性能進行監控,並畫出大量的圖表,提供強大的可視化界面。
JMX在Java編程語言中定義了應用程序以及網絡管理和監控的體系結構、設計模式、應用程序接口以及服務。
一般使用JMX來監控系統的運行狀態或管理系統的某些方面,好比清空緩存、從新加載配置文件等

https://www.cnblogs.com/baihuitestsoftware/articles/6405580.html
https://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

相關文章
相關標籤/搜索