A partir de hoje, minha compilação de maven falha.
[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO] at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO] at java.lang.String.<init>(String.java:203)
[INFO] at java.lang.String.substring(String.java:1877)
[ERROR] Sem memória; para aumentar a quantidade de memória, use o sinalizador -Xmx na inicialização (java -Xmx128M ...)
Até ontem eu tinha executado com sucesso uma compilação do maven.
A partir de hoje, aumentei minha pilha para 3 GB . Além disso, alterei apenas 2 a 3 linhas secundárias de código, por isso não compreendo este erro de 'falta de memória'.
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
EDIT: Eu tentei o comentário do autor alterando o pom.xml do meu módulo com falha. Mas eu tenho o mesmo erro de compilação do maven.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<fork>true</fork>
<meminitial>1024m</meminitial>
<maxmem>2024m</maxmem>
</configuration>
</plugin>
maven
out-of-memory
maven-3
pom.xml
maven-compiler-plugin
Kevin Meredith
fonte
fonte
-Xmx
.Respostas:
De que tipo de módulo 'web' você está falando? É uma guerra simples e tem uma guerra de tipo de embalagem?
Se você não estiver usando o kit de ferramentas da web do Google (GWT), não precisa fornecer
gwt.extraJvmArgs
Bifurcar o processo de compilação pode não ser a melhor ideia, porque ele inicia um segundo processo que ignora
MAVEN_OPTS
completamente, tornando a análise mais difícil.Então, eu tentaria aumentar o Xmx configurando o MAVEN_OPTS
E não bifurque o compilador para um processo diferente
O aumento
-XX:MaxPermSize=512m
não deve ser necessário porque se o tamanho do permanente for a razão do problema, então eu esperaria o errojava.lang.OutOfMemoryError: PermGen space
Se isso não resolver seu problema, você pode criar dumps de heap para análise posterior adicionando
-XX:+HeapDumpOnOutOfMemoryError
. Além disso, você pode usar jconsole.exe em seu diretório bin java para se conectar ao jvm enquanto a compilação está em execução e ver o que está acontecendo dentro do heap do jvm.Outra ideia (pode ser estúpida) que me ocorreu, você tem memória RAM suficiente dentro de sua máquina? Definir o tamanho da memória é bom, mas se seu host tiver apenas 4 GB e então você pode ter o problema de que o Java não é capaz de usar a memória definida porque ela já é usada pelo sistema operacional, Java, MS-Office ...
fonte
Respondendo tarde para mencionar outra opção em vez da
MAVEN_OPTS
variável de ambiente comum para passar para o Maven construir as opções de JVM necessárias.Desde o Maven 3.3.1 , você pode ter uma
.mvn
pasta como parte do projeto em questão e umjvm.config
arquivo como local perfeito para tal opção.Como parte das notas de lançamento oficiais
A principal vantagem dessa abordagem é que a configuração é isolada para o projeto em questão e aplicada a toda a construção também, e menos frágil do que
MAVEN_OPTS
para outros desenvolvedores trabalhando no mesmo projeto (esquecendo-se de defini-la).Além disso, as opções serão aplicadas a todos os módulos no caso de um projeto multimódulo.
fonte
Eu tenho o mesmo problema ao tentar compilar "instalação limpa" usando um VPS Lowend 512Mb de RAM e bom CPU. Execute OutOfMemory e matou o script repetidamente.
Usei
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"
e trabalhei.Ainda estou recebendo alguma outra falha de compilação porque é a primeira vez que preciso do Maven, mas o problema de OutOfMemory desapareceu.
fonte
Adicionar opção
para MAVEN_OPTS
maven-compiler-plugin
opçõesfonte
maven-compilier-plugin
e aumentar-XX:MaxPermSize
,Xmx
deve ser =XX:MaxPermSize
maven-compilier-plugin
Tive o mesmo problema ao compilar o Druid.io, aumentando o MaxDirectMemorySize finalmente funcionou.
fonte
Esta configuração abaixo está funcionando no meu caso
Tente usar -XX: MaxPermSize em vez de -XX: MaxPermGen
fonte
fonte
Em que tipo de sistema operacional você está executando?
Para atribuir mais de 2 GB de RAM, ele precisa ter pelo menos um sistema operacional de 64 bits.
Então, há outro problema. Mesmo se o seu sistema operacional tiver RAM ilimitada, mas fragmentada de forma que nenhum bloco livre de 2 GB esteja disponível, você também obterá exceções de memória insuficiente. E tenha em mente que a memória Heap normal é apenas parte da memória que o processo VM está usando. Portanto, em uma máquina de 32 bits, você provavelmente nunca será capaz de definir Xmx para 2048 MB.
Eu também sugeriria definir min e max memory com o mesmo valor, porque, neste caso, assim que a VM ficar sem memória, o primeiro tempo de 1 GB é alocado desde o início, a VM então aloca um novo bloco (assumindo que aumente com Blocos de 500 MB) de 1,5 GB depois de alocado, ele copia todo o material do bloco um para o novo e libera memória depois disso. Se ficar sem memória novamente, os 2 GB são alocados e os 1,5 GB são copiados, alocando temporariamente 3,5 GB de memória.
fonte
Ao construir o projeto na plataforma Unix / Linux, defina a sintaxe de opções do Maven conforme abaixo. Observe que sinais de qoutação única, não qoutação dupla.
fonte
Usar .mvn / jvm.config funcionou para mim e tem a vantagem adicional de estar vinculado ao projeto.
fonte
Isso acontece em grandes projetos no Windows quando cygwin ou outro emulador de linux é usado (git bash). Por alguma coincidência, ambos não funcionam no meu projeto, que é um grande projeto de código aberto. Em um script sh, alguns comandos mvn são chamados. O tamanho da memória aumenta para um tamanho de heap maior do que o especificado em Xmx e, na maioria das vezes, no caso de um segundo processo do Windows ser iniciado. Isso está tornando o consumo de memória ainda maior.
A solução neste caso é usar o arquivo batch e o tamanho Xmx reduzido e então as operações maven serão bem-sucedidas. Se houver interesse, posso revelar mais detalhes.
fonte
Alguém já mencionou o problema com o sistema operacional de 32 bits. No meu caso, o problema era que eu estava compilando com JDK de 32 bits.
fonte
Aumentar o tamanho da memória na variável de ambiente 'MAVEN_OPTS' ajudará a resolver esse problema. Para mim, aumentar de -Xmx756M para -Xmx1024M funcionou.
fonte