2013-02-08 4 views
1

У меня есть сборка Maven, которая, похоже, имеет утечку, из-за которой процесс Java заканчивается из памяти PermGen (EDIT), и я узнал из VisualVM, что куча и PermGen заметно повышаются всякий раз, когда строится новое. Теперь я хотел бы узнать, где протекает (EDIT: и не просто избавиться от случайного исключения).HPROF жалуется при попытке найти утечку памяти памяти Maven

Похоже, что стандартный подход к этому заключается в том, чтобы позволить HPROF собирать данные для посмертного анализа. Однако это не удается для меня, и сгенерированный файл java.hprof не может быть правильно проанализирован инструментами.

Мой файл "mvn.bat" выглядит (в 64-разрядной JVM на Windows 7):

set JAVA_HOME=c:\Program Files\java\jdk1.7.0_11 
C:\Users\TRA\progs\apache-maven-3.0.4\bin\mvn %* 

Мои MAVEN_OPTS выглядеть

MAVEN_OPTS=-agentlib:hprof=format=b 

и это результат " mvn clean ".

[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 9.589s 
[INFO] Finished at: Fri Feb 08 12:46:26 CET 2013 
[INFO] Final Memory: 8M/154M 
[INFO] ------------------------------------------------------------------------ 
Dumping Java heap ... 
HPROF LIST OF ALL FIELDS: 
[1] Lsun/reflect/UnsafeFieldAccessorImpl; "field" "Ljava/lang/reflect/Field;"(ty=OBJ) val=[0x00000000,0x500007e0] or [0x00000000,0x500007e0] 
[2] Lsun/reflect/UnsafeFieldAccessorImpl; "fieldOffset" "I" (primType=73(I)) val=[0x00000007,0x00000070] or [0x00000007,0x00000070] 
[3] Lsun/reflect/UnsafeFieldAccessorImpl; "isFinal" "Z" (primType=90(Z)) val=[0x00000007,0x7ae16501] or [0x00000007,0x7ae16501] 
[4] Lsun/reflect/UnsafeStaticFieldAccessorImpl; "base" "Ljava/lang/Object;"(ty=OBJ) 
[5] Lsun/reflect/UnsafeQualifiedStaticFieldAccessorImpl; "isReadOnly" "Z" (primType=90(Z)) 

FOLLOW REFERENCES RETURNED: 
[1]: flavor=1, refKind=2, primType=0, object_index=0x500007e0, length=-1, next=0xb0013852 
[2]: flavor=2, refKind=2, primType=73, object_index=0x0, length=-1, next=0xb0013851 
[3]: flavor=2, refKind=2, primType=90, object_index=0x0, length=-1, next=0xb0013850 
[4]: flavor=2, refKind=2, primType=90, object_index=0x0, length=-1, next=0x0 

PROBLEM WITH: 
[4] Lsun/reflect/UnsafeStaticFieldAccessorImpl; "base" "Ljava/lang/Object;" (primType=0(), got 90(Z)) val=[0x00000007,0x7ae16501] or [0x00000000,0x00000000] 

HPROF ERROR: Trouble with fields and heap data [hprof_reference.c:281] 

HPROF LIST OF ALL FIELDS: 
[1] Lsun/reflect/UnsafeFieldAccessorImpl; "field" "Ljava/lang/reflect/Field;"(ty=OBJ) val=[0x00000000,0x500007e1] or [0x00000000,0x500007e1] 
[2] Lsun/reflect/UnsafeFieldAccessorImpl; "fieldOffset" "I" (primType=73(I)) val=[0x00000007,0x00000074] or [0x00000007,0x00000074] 
[3] Lsun/reflect/UnsafeFieldAccessorImpl; "isFinal" "Z" (primType=90(Z)) val=[0x00000007,0x7b2c1001] or [0x00000007,0x7b2c1001] 
[4] Lsun/reflect/UnsafeStaticFieldAccessorImpl; "base" "Ljava/lang/Object;"(ty=OBJ) 
[5] Lsun/reflect/UnsafeQualifiedStaticFieldAccessorImpl; "isReadOnly" "Z" (primType=90(Z)) 

FOLLOW REFERENCES RETURNED: 
[1]: flavor=1, refKind=2, primType=0, object_index=0x500007e1, length=-1, next=0xb0013836 
[2]: flavor=2, refKind=2, primType=73, object_index=0x0, length=-1, next=0xb0013835 
[3]: flavor=2, refKind=2, primType=90, object_index=0x0, length=-1, next=0xb0013834 
[4]: flavor=2, refKind=2, primType=90, object_index=0x0, length=-1, next=0x0 

PROBLEM WITH: 
[4] Lsun/reflect/UnsafeStaticFieldAccessorImpl; "base" "Ljava/lang/Object;" (primType=0(), got 90(Z)) val=[0x00000007,0x7b2c1001] or [0x00000000,0x00000000] 

HPROF ERROR: Trouble with fields and heap data [hprof_reference.c:281] 

HPROF LIST OF ALL FIELDS: 
[1] Lsun/reflect/UnsafeFieldAccessorImpl; "field" "Ljava/lang/reflect/Field;"(ty=OBJ) val=[0x00000000,0x5002f4a1] or [0x00000000,0x5002f4a1] 
[2] Lsun/reflect/UnsafeFieldAccessorImpl; "fieldOffset" "I" (primType=73(I)) val=[0x00000007,0x00000070] or [0x00000007,0x00000070] 
[3] Lsun/reflect/UnsafeFieldAccessorImpl; "isFinal" "Z" (primType=90(Z)) val=[0x00000007,0x7ae16501] or [0x00000007,0x7ae16501] 
[4] Lsun/reflect/UnsafeStaticFieldAccessorImpl; "base" "Ljava/lang/Object;"(ty=OBJ) 
[5] Lsun/reflect/UnsafeQualifiedStaticFieldAccessorImpl; "isReadOnly" "Z" (primType=90(Z)) 

FOLLOW REFERENCES RETURNED: 
[1]: flavor=1, refKind=2, primType=0, object_index=0x5002f4a1, length=-1, next=0xb0013a4b 
[2]: flavor=2, refKind=2, primType=73, object_index=0x0, length=-1, next=0xb0013a4a 
[3]: flavor=2, refKind=2, primType=90, object_index=0x0, length=-1, next=0xb0013a49 
[4]: flavor=2, refKind=2, primType=90, object_index=0x0, length=-1, next=0x0 

(и дальше и дальше и дальше). Я незнаком с hprof.

Каков наилучший путь отсюда?

+0

Можете ли вы показать файл pom, который вызывает проблему? Вы выполняете модульные тесты или интеграционные тесты? – khmarbaise

+0

К сожалению, я не могу показать, что находится в этом вопросе. Есть несколько тестов, но ничего тяжелого веса. Я не считаю, что эта проблема связана с maven напрямую, но, возможно, с Guice или я просто пытаюсь сделать что-то неподдерживаемое. –

+0

Попробуйте добавить '-XX: -HeapDumpOnOutOfMemoryError' в' MAVEN_OPTS'. Это должно указывать JVM на создание дампа памяти, который затем может быть проанализирован профилировщиком (например, YourKit или VisualVM). –

ответ

0

Классическая проблема при переключении на 64 бита jvm из 32-битных является исключением PermGen.

При использовании 64-битной JVM вам нужен больший размер PermGen. Попробуйте использовать что-то вроде MAVEN_OPTS="-XX:MaxPermSize=256m" или выше, если необходимо.

Я Personnally использовать 512M или даже 1g на больших проектах при создании их с 64bits JVM. Те же проекты требуют половину того, что с 32 бит jmvs.

+0

По-видимому, я не был понятен - я уже нашел это обходное решение, чтобы получить работу. Теперь я хочу выяснить, в чем причина, и, видимо, что-то нарушено относительно hprof. –

Смежные вопросы