java.lang.OutOfMemoryError: espaço de heap Java no Maven

122

Quando executo o teste maven, java.lang.OutOfMemoryError acontece. Pesquisei no google por soluções e tentei export MAVEN_OPTS=-Xmx1024m, mas não funcionou. Alguém conhece outras soluções para esse problema, estou usando o maven 3.0

desde já, obrigado

Cole a mensagem de erro aqui quando executar "mvn test -e"

Testes com falha:
  aviso (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Testes executados: 11, Falhas: 3, Erros: 0, Ignorados: 0

10/11/01 13:37:18 INFO execuçãoengine.HExecutionEngine: Conectando ao hadoop fi
sistema de arquivos em: file: ///
[INFO] ----------------------------------------------- -------------------------
[INFO] FALHA NA CONSTRUÇÃO
[INFO] ----------------------------------------------- -------------------------
[INFO] Tempo total: 30.063s
[INFO] Finalizado em: segunda-feira, 01 de novembro 13:37:18 PDT 2010
[INFO] Memória final: 3M / 6M
[INFO] ----------------------------------------------- -------------------------
[ERRO] Falha ao executar a meta org.apache.maven.plugins: maven-surefire-plugin: 2.
5: teste (teste padrão) no projeto dw.pig: há falhas no teste.
[ERRO]
[ERRO] Consulte E: \ Código \ Java \ espaço de trabalho \ dw.pig \ target \ surefire-reports fo
r os resultados individuais do teste.
[ERRO] -> [Ajuda 1]
org.apache.maven.lifecycle.LifecycleExecutionException: falha ao executar o objetivo
rg.apache.maven.plugins: maven-surefire-plugin: 2.5: test (teste padrão) no projeto
 dw.pig: Há falhas no teste.

Consulte E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports para obter informações sobre
resultados de testes individuais.
        em org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 199)
        em org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 148)
        em org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 140)
        em org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:84)
        em org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:59)
        em org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild (LifecycleStarter.java:183)
        em org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Ciclo de vida
eStarter.java:161)
        em org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:314)
        em org.apache.maven.DefaultMaven.execute (DefaultMaven.java:151)
        em org.apache.maven.cli.MavenCli.execute (MavenCli.java:445)
        em org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168)
        em org.apache.maven.cli.MavenCli.main (MavenCli.java:132)
        em sun.reflect.NativeMethodAccessorImpl.invoke0 (método nativo)
        em sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
Java: 39)
        em sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces
sorImpl.java:25)
        em java.lang.reflect.Method.invoke (Method.java:597)
        em org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Laun
cher.java:290)
        em org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav
a: 230)
        em org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
uncher.java:409)
        em org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:
352)
Causado por: org.apache.maven.plugin.MojoFailureException: há falhas de teste
.

Consulte E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports para obter informações sobre
resultados de testes individuais.
        em org.apache.maven.plugin.surefire.SurefirePlugin.execute (SurefirePlugi
n.java:629)
        em org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (Padrão
BuildPluginManager.java:107)
        em org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... mais 19
[ERRO]
[ERRO] Execute novamente o Maven usando a opção -X para ativar o log de depuração completo.
[ERRO]
[ERRO] Para obter mais informações sobre os erros e possíveis soluções, acesse
d os seguintes artigos:
[ERRO] [Ajuda 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
zjffdu
fonte
Talvez você tenha um vazamento de memória em seu teste? Apesar de ser lixo coletado, você ainda pode criar um vazamento de memória em java: ibm.com/developerworks/library/j-leaks
anio

Respostas:

158

Quando executo o teste maven, java.lang.OutOfMemoryError acontece. Pesquisei no google por soluções e tentei exportar MAVEN_OPTS = -Xmx1024m, mas não funcionou.

Definir as Xmxopções usando MAVEN_OPTSfunciona, ele configura a JVM usada para iniciar o Maven. Dito isto, o maven-surefire-plugin bifurca uma nova JVM por padrão e, MAVEN_OPTSportanto, você não é aprovado.

Para configurar o dimensionamento da JVM usada pelo maven-surefire-plugin, você precisa:

  • mude forkModepara never(o que não é uma boa ideia, porque o Maven não será isolado do teste) ~ ou ~
  • use o argLineparâmetro (do jeito certo):

No caso posterior, algo como isto:

<configuration>
  <argLine>-Xmx1024m</argLine>
</configuration>

Mas devo dizer que tenho a tendência de concordar com Stephen aqui, é muito provável que haja algo errado com um dos seus testes e não tenho certeza de que dar mais memória seja a solução certa para "resolver" (esconder?) O seu problema.

Referências

Pascal Thivent
fonte
1
Você atualiza a tag <configuration> apenas no pom.xml pai?
Kevin Meredith
3
forkModefoi preterido: maven.apache.org/surefire/maven-surefire-plugin/...
Macarse
1
O @Macarse forkModefoi descontinuado, mas acho que deve ser substituído apenas por um com forkCountfuncionalidade semelhante. Uma maneira de usar o MAVEN_OPTS é, <argLine>${env.MAVEN_OPTS}</argLine>mas aparentemente isso não é recomendado, pois pode variar de computador para computador ( stackoverflow.com/a/10463133/32453 ). Observe também que se você estiver usando jacoco você deveria conjunto argLine uma maneira diferente stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack
63

Para quem é novo no Maven (como eu), aqui está toda a configuração que se encontra na seção de compilação do seu pom. Felicidades.

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <argLine>-Xmx1024m</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>
user738048
fonte
12

As chances são de que o problema esteja em um dos testes de unidade que você pediu ao Maven para executar.

Como tal, mexer no tamanho da pilha é a abordagem errada. Em vez disso, você deve observar o teste de unidade que causou o OOME e tentar descobrir se é a falha do teste de unidade ou o código que está testando.

Comece observando o rastreamento de pilha. Se não houver, execute mvn ... testnovamente com a -eopção

Stephen C
fonte
@ Stephen, eu posso passar o caso de teste no eclipse depois de definir Xmx1024m na configuração de execução, mas ele sempre lança OutOfMemoryError quando executo "mvn test" no console, mesmo quando adiciono as opções -e "mvn test -DMAVEN_OPTS = -Xmx1024m "
zjffdu
2
@zjffdu - Você perdeu completamente o meu ponto! O objetivo de adicionar "-e" não é fazer com que os testes funcionem. É descobrir por que eles não funcionam.
Stephen C
1
@zjffdu - nesse caso, você precisará depurar isso da maneira mais difícil, como faria com outros problemas de Java.
Stephen C
2
Recebo esse problema ao executar casos de teste GWT, que simulam um ambiente de navegador completo. Às vezes, não há problema em aumentar o tamanho da pilha.
djjeck
1
@djjeck - Sim, às vezes. Mas não acho que seja a solução certa na maioria das vezes.
Stephen C
8

Para solucionar temporariamente esse problema, achei o seguinte o caminho mais rápido:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"
Max Hohenegger
fonte
6

Resolvi esse problema do meu lado de duas maneiras:

  1. Adicionando essa configuração no pom.xml

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Alterne para o JDK 1.7 usado em vez de 1.6

Minh Dang
fonte
2

Para resolver java.lang.OutOfMemoryError: espaço de heap Java no Maven, tente configurar a configuração abaixo no pom

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${maven-surefire-plugin.version}</version>
     <configuration>
        <verbose>true</verbose>
        <fork>true</fork>
        <argLine>-XX:MaxPermSize=500M</argLine>
    </configuration>
</plugin>
Narayan Yerrabachu
fonte
1
+1 por mencionar MaxPermSize. Se o seu erro de falta de memória for causado pelo carregamento de bilhões de classes, como a criação de um novo HiveContext em seu teste de unidade, esta é a sua solução.
swdev
-2

Não apenas memória de pilha. também aumente o tamanho do perm para resolver essa exceção no maven, use essas variáveis ​​na variável de ambiente.

variable name: MAVEN_OPTS
variable value: -Xmx512m -XX:MaxPermSize=256m

Exemplo:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"
e2rabi
fonte
O erro não seria "espaço de heap Java", mas diferente.
Karl Richter