使用Eclipse Memory Analyzer分析Tomcat內存溢出

前言

在平時開發、測試過程當中、甚至是生產環境中,有時會遇到OutOfMemoryError,Java堆溢出了,這代表程序有嚴重的問題。咱們須要找形成OutOfMemoryError緣由。通常有兩種狀況:php

一、內存泄露,對象已經死了,沒法經過垃圾收集器進行自動回收,經過找出泄露的代碼位置和緣由,纔好肯定解決方案;
二、內存溢出,內存中的對象都還必須存活着,這說明Java堆分配空間不足,檢查堆設置大小(-Xmx與-Xms),檢查代碼是否存在對象生命週期太長、持有狀態時間過長的狀況。
以上是處理Java堆問題的思路,具體是怎麼進行分析,這裏介紹的是使用Eclipse Memory Analyzer tool(MAT)工具分析的過程。
 

1.MAT安裝與介紹
     下載地址:http://www.eclipse.org/mat/downloads.php。
或  在 eclipse ->install new software -> http://download.eclipse.org/mat/1.6/update-site/ 進行安裝

2.配置JVM 
     經過jvm參數--XX:-HeapDumpOnOutOfMemoryError可讓JVM在出現內存溢出是Dump出當前的內存轉儲快照;
  個人配置是:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
附加:動態看見eclipse運行內存
 
 
3.編寫測試代碼
public class Test {
	static class OOMObject {
		
	}
	public static void main(String[] args) {
		List<OOMObject> list = new ArrayList<OOMObject>();
		while(true){
			list.add(new OOMObject());
		}
	}
}

運行結果以下java

 

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid2277.hprof ...
Heap dump file created [27929324 bytes in 0.137 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3210)
	at java.util.Arrays.copyOf(Arrays.java:3181)
	at java.util.ArrayList.grow(ArrayList.java:261)
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
	at java.util.ArrayList.add(ArrayList.java:458)
	at com.b2b.console.Test.main(Test.java:13)

 

刷新項目target目錄eclipse

雙擊文件打開:jvm

 
     
     從上圖能夠看到它的大部分功能。
     1. Histogram能夠列出內存中的對象,對象的個數以及大小。
     2. Dominator Tree能夠列出那個線程,以及線程下面的那些對象佔用的空間。
     3.Top consumers經過圖形列出最大的object。
     4.Leak Suspects經過MA自動分析泄漏的緣由。
     
     Histogram以下圖:
     Objects:類的對象的數量。
     Shallow size:就是對象自己佔用內存的大小,不包含對其餘對象的引用,也就是對象頭加成員變量(不是成員變量的值)的總和。
     Retained size:是該對象本身的shallow size,加上從該對象能直接或間接訪問到對象的shallow size之和。換句話說,retained size是該對象被GC以後所能回收到內存的總和。



 
 
可見,類Test中OOMObject內存溢出.
 
 
以上是經過MAT分析Tomcat應用程序,找到內存泄露的緣由。

 參考文章: http://blog.csdn.net/xb151652000/article/details/8056792工具

相關文章
相關標籤/搜索