<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、概述 堆Dump是反應Java堆使用情況的內存鏡像,其中主要包括系統信息、虛擬機屬性、完整的線程Dump、所有類和對象的狀態等。 一般,在內存不足、GC異常等情況下,我們就會懷疑有內存泄露。這個時候我們就可以制作堆Dump來查看具體情況; ## 二、方案 使用jmap即可實現; ### **基礎入門** 把當前堆內存的快照轉儲到hprof(也可以命名為其他擴展類型)文件中,然后使用MAT、VisualVM等分析工具導入,即可對內存快照進行分析; ``` jmap -dump:format=b,file=/usr/lib/app/out.hprof ${javaPID} ``` 生成的文件,通過MAT工具即可分析; 查看各對象使用情況: ![](https://img.kancloud.cn/b9/94/b994189d86dad571fe978db3d5d63554_1920x1039.png) 查看各類引用(強、軟、弱、虛): ![](https://img.kancloud.cn/19/f9/19f9ce965fba67a8a691af2f0cd48cfd_1920x1039.png) >[danger] 可以間隔性做2份hprof對比,更容易查出問題; ### **多次對比分析** 分別打開兩次間隔了一段時間dump的hprof文件; ![](https://img.kancloud.cn/9f/cd/9fcdcd5734f08b4fe1d05421d3cb6274_1920x1039.png) ### **生產環境OOM分析** 在生產環境中,OOM發生后,需自動dump,需要修改JVM參數,增加: ``` -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/lib/app/raydump.hprof ``` tomcat中,在catalina.sh中進行設置,首行增加配置即可; ``` CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/lib/app/raydump.hprof" ``` 啟動后: ![](https://img.kancloud.cn/af/dd/afdde16769da81ca1e1b7333cf9e5a3d_1166x171.png) ## 三、分析指標 ### **術語** **Shallow Heap**表示對象本身占用內存的大小,不包含對其他對象的引用,也就是對象頭加成員變量(不是成員變量的值)的總和; **Retained Heap**是該對象自己的Shallow Heap,并加上從該對象能直接或間接訪問到對象的Shallow Heap之和。換句話說,Retained Heap是該對象GC之后所能回收到內存的總和; ### **Dominator Tree** Dominator Tree視圖基于對象實例的角度; 通過Dominator Tree視圖可以很容易的找出占用內存最多的幾個對象; ![](https://img.kancloud.cn/5b/fb/5bfb48c999618b78b5493523bf4239e6_1920x1039.png) 能看到,內存占用比率比較高的對象: ![](https://img.kancloud.cn/a7/9a/a79a86293b260f8816fd0a7832b24c26_1920x1039.png) 選擇查看的對象,并分析,一般就能發現問題了: ### **Histogram(直方圖)** Histogram視圖基于類的角度; 可以列出每個類產生的實例數量,以及所占用的內存大小和百分比; Shallow Heap 和 Retained Heap分別表示對象自身不包含引用的大小和對象自身并包含引用的大小,默認的大小單位是 Bytes,可以在 Window - Preferences 菜單中設置單位,圖中設置的是KB; ![](https://img.kancloud.cn/2d/fe/2dfe955bddb1d139b7cf19a08c170e00_1920x1039.png) 如果存在內存溢出,時間久了溢出類的實例數量或者內存占比會越來越多,排名也越來越靠前。可以點擊工具類上的圖標進行對比,通過多次對比不同時間點下的直方圖對比就很容易把溢出的類找出來; ### **示例** 普通分析: ![](https://img.kancloud.cn/de/46/de4688d559e36d8dcd83cabe6552ce23_1920x1039.png) 發現這個對象,占用比例不斷攀升,經分析,這里產生了內存泄露,修復后運行; OOM發生的時候,快照分析: ![](https://img.kancloud.cn/14/81/14818032a2b6b9158d0b89cedfe66358_1920x1039.png) 看看線程里面,OOM發生的時候,找到相關線索; ![](https://img.kancloud.cn/b0/88/b088edefcee97d42e0910fb562f85555_1920x1039.png) ![](https://img.kancloud.cn/ae/ce/aeceb9394a540325569ef4a0683ac039_1920x1039.png) 這個時候,就很容易發現問題了,修復,再次驗證,對比前后內存堆棧分析圖,即可;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看