오늘부터 내 maven 컴파일이 실패합니다.
[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)
[오류] 메모리가 부족합니다. 메모리 양을 늘리려면 시작시 -Xmx 플래그를 사용하십시오 (java -Xmx128M …)
어제 저는 maven 컴파일을 성공적으로 실행했습니다.
오늘부터 저는 힙을 3GB로 올렸습니다 . 또한 2-3 줄의 작은 코드 만 변경했기 때문에이 ‘메모리 부족’오류를 이해하지 못합니다.
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
편집 : 실패한 모듈의 pom.xml을 변경하여 포스터의 의견을 시도했습니다. 하지만 동일한 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>
답변
어떤 종류의 ‘웹’모듈에 대해 이야기하고 있습니까? 단순한 전쟁이고 포장 형 전쟁이 있습니까?
Google의 웹 툴킷 (GWT)을 사용하지 않는 경우 제공 할 필요가 없습니다. gwt.extraJvmArgs
컴파일 프로세스를 포크하는 것은 최선의 생각이 아닐 수 있습니다. 왜냐하면 MAVEN_OPTS
완전히 무시하는 두 번째 프로세스를 시작하기 때문에 분석이 더 어려워지기 때문입니다.
그래서 MAVEN_OPTS를 설정하여 Xmx를 늘리려 고합니다.
export MAVEN_OPTS="-Xmx3000m"
컴파일러를 다른 프로세스로 포크하지 마십시오.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
-XX:MaxPermSize=512m
파마 크기가 문제의 원인이라면 증가 가 필요하지 않아야합니다.java.lang.OutOfMemoryError: PermGen space
그래도 문제가 해결되지 않으면 추가 분석을 위해 힙 덤프를 만들 수 있습니다 -XX:+HeapDumpOnOutOfMemoryError
. 또한 컴파일이 실행되는 동안 Java bin 디렉토리의 jconsole.exe를 사용하여 jvm에 연결하고 jvm의 힙 내부에서 진행되는 작업을 확인할 수 있습니다.
나에게 떠오른 또 다른 아이디어 (어리석은 것일 수도 있음), 컴퓨터 내부에 충분한 RAM이 있습니까? 메모리 크기를 정의하는 것은 좋지만 호스트에 4GB 만 있으면 이미 OS, Java, MS-Office에서 사용하고 있기 때문에 Java가 정의 된 메모리를 사용할 수 없다는 문제가 발생할 수 있습니다.
답변
MAVEN_OPTS
Maven에 전달할 공통 환경 변수가 아닌 또 다른 옵션을 언급하기 위해 늦게 대답 하여 필요한 JVM 옵션을 빌드합니다.
Maven 3.3.1 부터는 .mvn
관련 프로젝트의 일부로 폴더를 가질 수 있고 jvm.config
이러한 옵션을위한 완벽한 장소로 파일을 가질 수 있습니다 .
프로젝트 소스 트리의 기본 디렉토리에있는 두 개의 새로운 선택적 구성 파일
.mvn/jvm.config
및.mvn/maven.config
. 존재하는 경우 이러한 파일은 기본 jvm 및 maven 옵션을 제공합니다. 이러한 파일은 프로젝트 소스 트리의 일부이므로 모든 프로젝트 체크 아웃에 표시되며 프로젝트가 빌드 될 때마다 자동으로 사용됩니다.
공식 출시 노트의 일부
Maven에서는 프로젝트별로 JVM 구성을 정의하는 것이 간단하지 않습니다. 환경 변수
MAVEN_OPTS
및의 사용을 기반으로하는 기존 메커니즘${user.home}/.mavenrc
은 프로젝트에 속하지 않는 단점이있는 다른 옵션입니다.이 릴리스부터는
${maven.projectBasedir}/.mvn/jvm.config
파일을 통해 JVM 구성을 정의 할 수 있습니다. 즉, 프로젝트별로 빌드 옵션을 정의 할 수 있습니다. 이 파일은 프로젝트의 일부가되며 프로젝트와 함께 체크인됩니다. 따라서 더 이상MAVEN_OPTS
,.mavenrc
파일이 필요하지 않습니다 . 예를 들어 다음 JVM 옵션을${maven.projectBasedir}/.mvn/jvm.config
파일에 넣는 경우 :-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true
이 접근 방식의 가장 큰 장점은 구성이 관련 프로젝트에 격리되고 전체 빌드에도 적용되며 MAVEN_OPTS
동일한 프로젝트에서 작업하는 다른 개발자 보다 취약성이 적다는 것 입니다 (설정을 잊어 버린 경우).
또한 다중 모듈 프로젝트의 경우 모든 모듈에 옵션이 적용됩니다.
답변
Lowend 512Mb ram VPS와 좋은 CPU를 사용하여 “새로 설치”를 컴파일하는 데 동일한 문제가 발생했습니다. OutOfMemory 및 종료 된 스크립트를 반복적으로 실행하십시오.
나는 사용 export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"
하고 일했습니다.
Maven이 처음 필요하기 때문에 여전히 다른 컴파일 실패가 발생하지만 OutOfMemory 문제가 사라졌습니다.
답변
옵션 추가
-XX:MaxPermSize=512m
MAVEN_OPTS로
maven-compiler-plugin
옵션
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<fork>true</fork>
<meminitial>1024m</meminitial>
<maxmem>2024m</maxmem>
</configuration>
</plugin>
답변
Druid.io를 컴파일 할 때 동일한 문제가 발생하여 MaxDirectMemorySize를 늘려 마침내 효과가있었습니다.
export MAVEN_OPTS="-Xms8g -Xmx8g -XX:MaxDirectMemorySize=4096m"
답변
내 경우에는 아래 구성이 작동합니다.
<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>
-XX : MaxPermGen 대신 -XX : MaxPermSize를 사용하십시오.
답변
_JAVA_OPTIONS="-Xmx3G" mvn clean install