2010-06-23 3 views
171

Possible Duplicate:
How to deal with “java.lang.OutOfMemoryError: PermGen space” error«java.lang.OutOfMemoryError: PermGen пространство» в Maven построить

я получаю эту ошибку при построении проекта Maven, я увеличил MAVEN_OPTS, но все же, я нашел некоторые подобные сообщения, но они отсылая к что-то другое. Как это исправить?

The system is out of resources. 
Consult the following stack trace for details. 
java.lang.OutOfMemoryError: PermGen space 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at org.codehaus.plexus.compiler.javac.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:56) 
     at com.sun.tools.javac.comp.Annotate.<init>(Annotate.java:52) 
     at com.sun.tools.javac.comp.Annotate.instance(Annotate.java:36) 
     at com.sun.tools.javac.jvm.ClassReader.<init>(ClassReader.java:215) 
     at com.sun.tools.javac.jvm.ClassReader.instance(ClassReader.java:168) 
     at com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:293) 
     at com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:72) 
     at com.sun.tools.javac.main.Main.compile(Main.java:340) 
     at com.sun.tools.javac.main.Main.compile(Main.java:279) 
     at com.sun.tools.javac.main.Main.compile(Main.java:270) 
     at com.sun.tools.javac.Main.compile(Main.java:87) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420) 
     at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141) 
     at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493) 
     at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114) 
     at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556) 
     at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535) 
+1

Есть много похожих вопросов, если вы ищете SO для «пространства PermGen» –

+1

umm это при развертывании в tomcat. Я еще не получил так, что его не то же самое, что вы видите. Я даже не использую tomcat. Я использую ошибку jboss. во время сборки maven –

+6

@Paul Tomblin Согласен, но ни один из них не ссылается на ошибки при построении проекта –

ответ

296

Когда вы говорите, что увеличили MAVEN_OPTS, какие значения вы увеличили? Возможно, вы увеличиваете MaxPermSize, как в примере:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m" 

(или для Windows :)

set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=128m 
+7

Могу ли я установить это свойство как-то в pom.xml? Мне нужно сделать мою сборку переносимой в разные среды. –

+5

он это знает. не то, что он попросил –

+19

просто заметку для пользователей Mac/Linux, просто добавьте инструкцию экспорта в ваш ~/.profile (или подобное имя файла). Например: export MAVEN_OPTS = "- Xmx512m -XX: MaxPermSize = 256m" ... и перезагрузите вашу оболочку. Работал для меня. –

16

Увеличьте размер своего пространства во владении, конечно. Используйте опцию -XX:MaxPermSize=128m. Задайте значение для чего-то подходящего.

22

Если вы хотите, чтобы сделать эту часть вашего POM для повторяемой сборки, вы можете использовать вилку -вариант из нескольких плагинов (особенно compiler:compilesurefire:test и):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.2</version> 
    <configuration> 
     <fork>true</fork> 
     <meminitial>128m</meminitial> 
     <maxmem>1024m</maxmem> 
     <compilerArgs> 
     <arg>-XX:MaxPermSize=256m</arg> 
     </compilerArgs> 
    </configuration> 
    </plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18</version> 
    <configuration> 
     <forkCount>1</forkCount> 
     <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine> 
    </configuration> 
</plugin> 
+3

Лучше иметь его в пом, чтобы другие разработчики/среды не столкнулись с OOME. –

+0

К сожалению, он изменяется с версиями Java, поэтому может потребоваться стандартизация. (Например, использование% JAVA_1_7_HOME%, как это делает Apache Commons (поскольку инструментальная цепочка может быть не готова к использованию в этих ситуациях). – eckes

+0

Добавил бы этот аргумент в качестве предупреждения JVM при запуске сборки на Java 1.8? – djangofan

0

Я нашел решение команды мерзавца Баш, когда вы пытаетесь построить войну с помощью мерзавец МВН НКУ инсталляционный для «java.lang.OutOfMemoryError: PermGen пространства» в Maven построить ошибки приходят

use below command first 

$ export MAVEN_OPTS="-Xmx512m -Xss32m" 

then use your mvn command to clean install /build war file 

$ mvn clean install 

NOTE: you don't need -XX:MaxPermSize argument in MAVEN_OPTS when your are using jdk1.8 
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=XXXm; support was removed in 8.0 
0

Когда я столкнулся это исключением, я решил эту проблему с помощью Run Configurations ... панель как изображение показывает below.Especially, на вкладке JRE аргументы VM являются критическими
("-Xmx1024m -Xms512m -XX: MaxPermSize = 1024 м -XX: PermSize = 512 м").

enter image description here

0

Мы столкнулись с этой ошибкой при постоянной генерации куча полна, и некоторые из нас мы используем командную строку, чтобы построить наш Maven проект в окнах. так как мы должны увеличить размер кучи, мы могли бы установить нашу переменную среды @ ControlPanel/Система и безопасность/Системы и там нажмите на заходящего Изменить и выберите Дополнительно и установите переменную окружающей среды, как показано ниже

  • с переменной имя: MAVEN_OPTS
  • переменной значение: -XX: MaxPermSize = 128m
0

Это очень досадная ошибка, так что я сделал: Под Windows:

Edit system environment variables - > Edit Variables -> New 

затем заполнить

MAVEN_OPTS 
-Xms512m -Xmx2048m -XX:MaxPermSize=512m 

enter image description here

Затем перезагрузите консоль и запустить Maven строить заново. Больше проблем с Maven space/perm size.

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