07-jvm-查詢命令-02

jmap

jmap(JVM Memory Map)命令用於生成heap dump文件,若是不使用這個命令,還闊以使用-XX:+HeapDumpOnOutOfMemoryError參數來讓虛擬機出現OOM的時候·自動生成dump文件。 jmap不只能生成dump文件,還闊以查詢finalize執行隊列、Java堆和永久代的詳細信息,如當前使用率、當前使用的是哪一種收集器等。java

命令格式
jmap [option] LVMID
複製代碼
option參數
  • dump : 生成堆轉儲快照
  • finalizerinfo : 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
  • heap : 顯示Java堆詳細信息
  • histo : 顯示堆中對象的統計信息
  • permstat : to print permanent generation statistics
  • F : 當-dump沒有響應時,強制生成dump快照
-dump

經常使用的格式算法

-dump:live,fomat=b,file=<filename> pid
複製代碼

dump堆到文件,format指定輸出格式,live指明是活着的對象,file指定文件名瀏覽器

C:\Users\Administrator>jmap -dump:live,format=b,file=dump.hprof 19492
Dumping heap to C:\Users\Administrator\dump.hprof ...
Heap dump file created
複製代碼
-finalizerinfo

打印等待回收對象的信息bash

C:\Users\Administrator>jmap -finalizerinfo 19492
Attaching to process ID 19492, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09
Number of objects pending for finalization: 0
複製代碼

能夠看到當前F-QUEUE隊列中並無等待Finalizer線程執行finalizer方法的對象。服務器

-heap

打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用狀況,能夠用此來判斷內存目前的使用狀況以及垃圾回收狀況jvm

C:\Users\Administrator>jmap -heap 19492
Attaching to process ID 19492, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:  //堆內存初始化配置
   MinHeapFreeRatio         = 0 //對應jvm啓動參數-XX:MinHeapFreeRatio設置JVM堆最小空閒比率(default 40)
   MaxHeapFreeRatio         = 100 //對應jvm啓動參數 -XX:MaxHeapFreeRatio設置JVM堆最大空閒比率(default 70)
   MaxHeapSize              = 2116026368 (2018.0MB)//對應jvm啓動參數-XX:MaxHeapSize=設置JVM堆的最大大小
   NewSize                  = 44564480 (42.5MB)//對應jvm啓動參數-XX:NewSize=設置JVM堆的‘新生代’的默認大小
   MaxNewSize               = 705167360 (672.5MB)//對應jvm啓動參數-XX:MaxNewSize=設置JVM堆的‘新生代’的最大大小
   OldSize                  = 89653248 (85.5MB)//對應jvm啓動參數-XX:OldSize=<value>:設置JVM堆的‘老生代’的大小
   NewRatio                 = 2//對應jvm啓動參數-XX:NewRatio=:‘新生代’和‘老生代’的大小比率 
   SurvivorRatio            = 8//對應jvm啓動參數-XX:SurvivorRatio=設置年輕代中Eden區與Survivor區的大小比值 
   MetaspaceSize            = 21807104 (20.796875MB)//對應jvm啓動參數-XX:PermSize=<value>:設置JVM堆的‘永生代’的初始大小
   CompressedClassSpaceSize = 1073741824 (1024.0MB)//對應jvm啓動參數-XX:MaxPermSize=<value>:設置JVM堆的‘永生代’的最大大小
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage://堆內存使用狀況
PS Young Generation
Eden Space://Eden區內存分佈
   capacity = 567279616 (541.0MB)//Eden區總容量
   used     = 16180632 (15.431053161621094MB)//Eden區已使用
   free     = 551098984 (525.5689468383789MB)//Eden區剩餘容量
   2.8523203625916995% used//Eden區使用比率
From Space://其中一個Survivor區的內存分佈
   capacity = 25690112 (24.5MB)
   used     = 0 (0.0MB)
   free     = 25690112 (24.5MB)
   0.0% used
To Space://另外一個Survivor區的內存分佈
   capacity = 25165824 (24.0MB)
   used     = 0 (0.0MB)
   free     = 25165824 (24.0MB)
   0.0% used
PS Old Generation//當前的Old區內存分佈
   capacity = 159383552 (152.0MB)
   used     = 69838528 (66.60321044921875MB)
   free     = 89545024 (85.39678955078125MB)
   43.817901611328125% used

30247 interned Strings occupying 3615304 bytes.
複製代碼
-histo

打印堆的對象統計,包括對象數、內存大小等等 (由於在dump:live前會進行full gc,若是帶上live則只統計活對象,所以不加live的堆大小要大於加live堆的大小 )工具

-permstat -----》jdk8之後就廢棄了

打印Java堆內存的永久保存區域的類加載器的智能統計信息。對於每一個類加載器而言,它的名稱、活躍度、地址、父類加載器、它所加載的類的數量和大小都會被打印。此外,包含的字符串數量和大小也會被打印。spa

jhat

jhat(JVM Heap Analysis Tool)命令是與jmap搭配使用,用來分析jmap生成的dump,jhat內置了一個微型的HTTP/HTML服務器,生成dump的分析結果後,能夠在瀏覽器中查看。在此要注意,通常不會直接在服務器上進行分析,由於jhat是一個耗時而且耗費硬件資源的過程,通常把服務器生成的dump文件複製到本地或其餘機器上進行分析。線程

命令格式
jhat [dumpfile]
複製代碼
  • -stack false|true 關閉對象分配調用棧跟蹤(tracking object allocation call stack)。 若是分配位置信息在堆轉儲中不可用. 則必須將此標誌設置爲 false. 默認值爲 true.>debug

  • -refs false|true 關閉對象引用跟蹤(tracking of references to objects)。 默認值爲 true. 默認狀況下, 返回的指針是指向其餘特定對象的對象,如反向連接或輸入引用(referrers or incoming references), 會統計/計算堆中的全部對象。>

  • -port port-number 設置 jhat HTTP server 的端口號. 默認值 7000.>

  • -exclude exclude-file 指定對象查詢時須要排除的數據成員列表文件(a file that lists data members that should be excluded from the reachable objects query)。 例如, 若是文件列列出了 java.lang.String.value , 那麼當從某個特定對象 Object o 計算可達的對象列表時, 引用路徑涉及 java.lang.String.value 的都會被排除。>

  • -baseline exclude-file 指定一個基準堆轉儲(baseline heap dump)。 在兩個 heap dumps 中有相同 object ID 的對象會被標記爲不是新的(marked as not being new). 其餘對象被標記爲新的(new). 在比較兩個不一樣的堆轉儲時頗有用.>

  • -debug int 設置 debug 級別. 0 表示不輸出調試信息。 值越大則表示輸出更詳細的 debug 信息.>

  • -version 啓動後只顯示版本信息就退出>

  • -J< flag > 由於 jhat 命令實際上會啓動一個JVM來執行, 經過 -J 能夠在啓動JVM時傳入一些啓動參數. 例如, -J-Xmx512m 則指定運行 jhat 的Java虛擬機使用的最大堆內存爲 512 MB. 若是須要使用多個JVM啓動參數,則傳入多個 -Jxxxxxx.

jstack

jstack用於生成java虛擬機當前時刻的線程快照。線程快照是當前java虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程間死鎖、死循環、請求外部資源致使的長時間等待等。 線程出現停頓的時候經過jstack來查看各個線程的調用堆棧,就能夠知道沒有響應的線程到底在後臺作什麼事情,或者等待什麼資源。 若是java程序崩潰生成core文件,jstack工具能夠用來得到core文件的java stack和native stack的信息,從而能夠輕鬆地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還能夠附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 若是如今運行的java程序呈現hung的狀態,jstack是很是有用的。

命令格式
jstack [option] LVMID
複製代碼
option參數
  • -F : 當正常輸出請求不被響應時,強制輸出線程堆棧
  • -l : 除堆棧外,顯示關於鎖的附加信息
  • -m : 若是調用到本地方法的話,能夠顯示C/C++的堆棧
jstack -l 15092 | more
複製代碼
jinfo

jinfo(JVM Configuration info)這個命令做用是實時查看和調整虛擬機運行參數。 以前的jps -v口令只能查看到顯示指定的參數,若是想要查看未被顯示指定的參數的值就要使用jinfo口令

命令格式
jinfo [option] [args] LVMID
複製代碼
option參數
  • -flag : 輸出指定args參數的值
  • -flags : 不須要args參數,輸出全部JVM參數的值
  • -sysprops : 輸出系統屬性,等同於System.getProperties()
C:\Users\Administrator>jinfo -flag 15092
複製代碼
相關文章
相關標籤/搜索