jvm 內存dump、gc查看、線程死鎖,jmap、jstack、jstat


1. jstat 
    這個命令對於查看Jvm的堆棧信息很有用。能夠查看eden,survivor,old,perm等heap的capacity,utility信息

    對於查看系統是不是有能存泄漏以及參數設置是否合理有不錯的意義

2. jstack

    這個是用來查看jvm當前的thread dump的。可以看到當前Jvm里面的線程狀況。

    這個對於查找blocked線程比較有意義

3. jmap .

    這個是用來查看jvm當前的heap dump的。可以看出當前jvm中各種對象的數量,所占空間等等。

    尤其值得一提的是這個命令可以到處一份binary heap dump的bin文件,這個文件能夠直接用

    Eclipse Memory Anayliser來分析,並找出潛在的內存泄漏的地方。

4. 還有一個比較有用的非jvm命令--netstat

    通過這個命令可以看到linux系統當前在各個端口的鏈接狀態,比如查看數據庫連接數等等

jstat


       1. jstat -gc pid

            可以顯示gc的信息,查看gc的次數,及時間。

            其中最后五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。

      2.jstat -gccapacity pid
            可以顯示,VM內存中三代(young,old,perm)對象的使用和占用大小,

            如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量,

            PGC是當前新生成的perm內存占用量,PC是但前perm內存占用量。

            其他的可以根據這個類推, OC是old內純的占用量。

     3.jstat -gcutil pid

            統計gc信息統計。

     4.jstat -gcnew pid

           年輕代對象的信息。

     5.jstat -gcnewcapacity pid

           年輕代對象的信息及其占用量。

     6.jstat -gcold pid

          old代對象的信息。

     7.stat -gcoldcapacity pid

          old代對象的信息及其占用量。

     8.jstat -gcpermcapacity pid

          perm對象的信息及其占用量。

     9.jstat -class pid

          顯示加載class的數量,及所占空間等信息。
     10.jstat -compiler pid

          顯示VM實時編譯的數量等信息。

     11.stat -printcompilation pid

          當前VM執行的信息。

        一些術語的中文解釋:

         S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
         S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
         S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
         S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
           EC:年輕代中Eden(伊甸園)的容量 (字節)
           EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
           OC:Old代的容量 (字節)
           OU:Old代目前已使用空間 (字節)
           PC:Perm(持久代)的容量 (字節)
           PU:Perm(持久代)目前已使用空間 (字節)
         YGC:從應用程序啟動到采樣時年輕代中gc次數
       YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)
         FGC:從應用程序啟動到采樣時old代(全gc)gc次數
       FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
         GCT:從應用程序啟動到采樣時gc用的總時間(s)

    NGCMN:年輕代(young)中初始化(最小)的大小 (字節)

    NGCMX:年輕代(young)的最大容量 (字節)

        NGC:年輕代(young)中當前的容量 (字節)

   OGCMN:old代中初始化(最小)的大小 (字節)

   OGCMX:old代的最大容量 (字節)

       OGC:old代當前新生成的容量 (字節)

   PGCMN:perm代中初始化(最小)的大小 (字節)

   PGCMX:perm代的最大容量 (字節)  

       PGC:perm代當前新生成的容量 (字節)

          S0:年輕代中第一個survivor(幸存區)已使用的占當前容量百分比

         S1:年輕代中第二個survivor(幸存區)已使用的占當前容量百分比

           E:年輕代中Eden(伊甸園)已使用的占當前容量百分比

           O:old代已使用的占當前容量百分比

           P:perm代已使用的占當前容量百分比

  S0CMX:年輕代中第一個survivor(幸存區)的最大容量 (字節)

 S1CMX :年輕代中第二個survivor(幸存區)的最大容量 (字節)

    ECMX:年輕代中Eden(伊甸園)的最大容量 (字節)

       DSS:當前需要survivor(幸存區)的容量 (字節)(Eden區已滿)

          TT: 持有次數限制

       MTT : 最大持有次數限制

jstack


   jstack用於打印出給定的Java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64",Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid

如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。

 

需要注意的問題:

l 不同的 JAVA虛機的線程 DUMP的創建方法和文件格式是不一樣的,不同的 JVM版本, dump信息也有差別。

l 在實際運行中,往往一次 dump的信息,還不足以確認問題。建議產生三次 dump信息,如果每次 dump都指向同一個問題,我們才確定問題的典型性。 

原文:https://blog.csdn.net/u013851082/article/details/53665117


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM