監控JVM內存使用情況


1.使用jstat命令查看堆內存的使用情況
                jstat 命令選項 vmid 間隔時間 查詢次數
                
                1.查看當前進程Class類加載的統計
                    jstat -class *****

 

 

 


                
                2.查看編譯統計
                    jstat -compiler *****

 

 

 


                
                3.查看垃圾回收統計
                    jstat -gc *****

 

 

 


                     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
      13312.0 13312.0  0.0    0.0   81920.0   7537.3   217088.0    4546.5   18944.0 18467.5 2304.0 2182.4      7    0.055   6      0.151    0.206
                    
                    s0c: 第一個Survivor區域大小
                    S1C:第二個Survivor區域的大小
                    S0U:第一個Survivor區域使用的大小
                    S1U:第二個Survivor區域使用的大小
                    EC:Eden區域的大小
                    EU:Eden區域的使用大小
                    OC:Old區的大小
                    OU:Old區使用的大小
                    MC:方法區大小
                    YGC:年輕代垃圾回收次數,YGCT: 使用時間
                    FGC:年老代垃圾回收次數,FGCT: 使用時間

      可追加間隔時間和打印次數

       jstat -gc ***** 1000 5  代表間隔一秒打印五次

 

 

 


            
            2.通過jmap監控內存使用情況
                2.1 監控堆內存:jmap -heap *****

 


                2.2 監控內存中對象的數量及其大小:
                    查看所有對象的數量以及大小包括類型:jmap -histo ***** | more  (| more代表分頁)

      

 

 


                    查看活躍對象的數量以及大小包括類型:jmap -histo:live ***** | more
                

 

 


                2.3 通過jmap導出堆內存使用情況的文件,方便查看
                   jmap -dump:format=b,file=E:\Y2學習\JVM\導出\dump.dat 30052

    

 

     

 

 


                
                
                2.4 通過jhat查看dump文件並且進行分析,啟動一個HTTP端口進行訪問,通過該端口可以查看到整個應用程序所使用的的所有對象的情況,提供OQL進行檢索
                    jhat -port 8081 E:\Y2學習\JVM\導出\dump.dat

    

 

     

    

 

     底部有查詢工具

    

 

     

 

     

 

 

 


            
            3.MAT分析工具,在工具中可以查看到對象數量以及內存使用的情況,當然可以分析出可能出現問題
                如果問題是正常情況,可以加大內存,如果是非正常情況,手動解決代碼問題
            

 

    選擇要分析的文件

 

 

 

 

 

查看數量及占用大小等

 

 

 首行空出是搜索功能,根據正則搜索,例輸入 java 回車搜索

 

 

 

 

 

    


            4.模擬內存溢出:

                public static void main(String[] args) {
                    List<Object> objList=new ArrayList<>();
                    for (int i=0;i<10000000;i++){
                        String str="";
                        for(int j=0;j<1000;j++){
                            str+= UUID.randomUUID().toString();
                        }
                        objList.add(str);
                    }
                    System.out.println("添加數據成功~");
                }

 


                參數設置:-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError,初識空間和最大空間都給成8m,如果報錯就生成報錯文件

 

這樣啟動運行必然會內存溢出

 

 

 找到項目的目錄,找到報錯文件

 

 

再用mat分析這個文件

 

 


           


免責聲明!

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



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