天天看點

用Eclipse Memory Analyzer查找記憶體洩露

系統上線後,程式報出out of memory錯誤。一方面先加大程式運作的記憶體以解燃眉之急,另一方面希望能有個工具能查出記憶體洩露的原因。

    通過查閱資料發現了Memory Analyzer這個eclipse插件,下面講下怎麼用。

    首先,擷取Heap dump檔案。 

有三種方式:

    1、設定JVM參數,-XX:+HeapDumpOnOutOfMemoryError,在記憶體溢出的時候就會生成Heap dump檔案

    2、使用jmap。(windows可以通過任務管理器檢視pid)

Java5:jmap -heap:format=b <pid>;

Java6:jmap -dump:format=b,file=HeapDump.bin <pid>

    3、在本機運作java程式的時候,直接通過Memory Analyzer生成Heap dump檔案。

用Eclipse Memory Analyzer查找記憶體洩露

    其次,安裝Memory Analyzer。

現在已經出1.2.1了,下載下傳位址http://www.eclipse.org/mat/downloads.php

也可以通過eclipse install new software ,位址http://download.eclipse.org/mat/1.2/update-site/

    安好後就可以開始看問題啦!

進入後,首頁面如下圖所示:

用Eclipse Memory Analyzer查找記憶體洩露

從上圖可以看到它的大部分功能。

     1. Histogram可以列出記憶體中的對象,對象的個數以及大小。

     2. Dominator Tree可以列出那個線程,以及線程下面的那些對象占用的空間。

     3.Top consumers通過圖形列出最大的object。

     4.Leak Suspects通過MA自動分析洩漏的原因。

這次重點是看Leak Suspects,點開後就能看到

用Eclipse Memory Analyzer查找記憶體洩露

點 Detial就能看到實際的一些情況,因為我的錯誤比較2,是以到這步就能看到原因,fix it!

用Eclipse Memory Analyzer查找記憶體洩露