2012-08-26 53 views
2

我有一個運行在tomcat上的grails應用程序,似乎在泄漏類加載器,並在大約2周的操作後拋出OOME。然而,我無法弄清楚問題的根本原因。任何有關如何解決這個問題的幫助將不勝感激。Grails應用程序中的類加載器內存泄漏

Grails插件的安裝

app.grails.version=1.3.7 
app.name=bm 
app.servlet.version=2.4 
app.version=0.1 
plugins.database-migration=1.0 
plugins.executor=0.3 
plugins.export=0.9 
plugins.google-visualization=0.5 
plugins.hibernate=1.3.7 
plugins.mail=1.0-SNAPSHOT 
plugins.quartz=0.4.2 
plugins.spring-security-core=1.2.1 
plugins.tomcat=1.3.7 

JMAP輸出

num  #instances   #bytes class name 
---------------------------------------------- 
1:  140060  18764192 <constMethodKlass> 
2:  164561  17114344 org.codehaus.groovy.runtime.metaclass.MetaMethodIndex$Entry 
3:  140060  16817936 <methodKlass> 
4:   14326  15583816 <constantPoolKlass> 
5:  157629  14203608 [C 
6:   14326  12833728 <instanceKlassKlass> 
7:   71899  10928648 java.lang.reflect.Method 
8:   12865  9810400 <constantPoolCacheKlass> 
9:  155186  9471320 <symbolKlass> 
10:   28791  9364696 [B 
11:  164650  7903200 java.util.concurrent.locks.ReentrantLock$NonfairSync 
12:  164496  7895808 java.util.concurrent.ConcurrentHashMap$Segment 
13:  154748  7427904 java.util.HashMap$Entry 
14:  137621  7235504 [Ljava.lang.Object; 
15:  178058  7122320 java.lang.String 
16:  164496  5876008 [Ljava.util.concurrent.ConcurrentHashMap$HashEntry; 
17:   25224  5322656 [Ljava.util.HashMap$Entry; 
18:   16359  4774824 [Lorg.codehaus.groovy.util.ComplexKeyHashMap$Entry; 
19:   6456  3368704 <methodDataKlass> 
20:   69962  3358176 org.codehaus.groovy.util.SingleKeyHashMap$Entry 
21:   59890  3353840 java.lang.ref.SoftReference 
22:   69222  3322656 java.lang.ref.WeakReference 
23:   31530  3026880 java.beans.MethodDescriptor 
24:   22579  2890112 java.lang.reflect.Field 
25:   897  2824728 [Lorg.codehaus.groovy.runtime.metaclass.MetaMethodIndex$Entry; 
26:   15006  2761104 java.lang.Class 
27:   45281  2592272 [I 
28:   23921  2487784 org.codehaus.groovy.reflection.CachedMethod 
29:   46947  1877880 java.util.ArrayList 
30:   58290  1865280 org.codehaus.groovy.util.FastArray 
31:   21968  1832888 [[I 
32:   56895  1792872 [Ljava.lang.Class; 
33:   34  1681456 [Lorg.apache.commons.collections.map.AbstractHashedMap$HashEntry; 
34:   46489  1661760 [Ljava.lang.String; 
35:   10267  1562376 [Ljava.util.concurrent.ConcurrentHashMap$Segment; 
36:   12511  1501320 java.lang.reflect.Constructor 
37:   30817  1479216 java.util.concurrent.ConcurrentHashMap$HashEntry 
38:   17869  1248784 [S 
39:   19447  1244608 java.util.HashMap 
40:   20885  1169560 groovy.lang.MetaBeanProperty 

不知執行人插件是罪魁禍首,由於大量的ConcurrentHashMap條目。我在不同的時間使用jmap檢查了我自己的類的實例數量,並且它們似乎沒有增加。我該如何着手解決這個問題,即使你能爲我提供一個「解決」這個問題的方法,它將會很棒。

+2

確保它不是着名的'tomcat permgen space'錯誤,發生在重新部署應用程序之後 –

+0

沒有「着名的'tomcat permgen space'錯誤」這樣的事情。每一個permgen oom都是由於應用程序或其中一個庫的錯誤所致。 – Nikem

+0

我已關閉並重新啓動與應用程序的tomcat,但仍然發生這種情況。所以我猜這個可以排除。 – Abe

回答

3

可能值得嘗試Plumbr。它現在也發現了permgen泄漏,而且這個功能暫時是免費的。