Windows의 Maven 2에서 Java 힙 공간 설정


91

프로젝트를 빌드하는 동안이 메시지가 나타납니다.

java.lang.OutOfMemoryError : Java 힙 공간

힙 공간을 늘리려면 어떻게해야합니까? 8Gb 또는 RAM이있어 maven이 그렇게 많이 소비하는 것은 불가능합니다 .http : //vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the -java-heap-memory-for-maven-2-on-linux / Linux 에서 수행하는 방법,하지만 Windows 7에 있습니다. Windows에서 Java 힙 공간을 어떻게 변경할 수 있습니까?


64 비트 버전의 Windows를 사용하고 있다고 가정합니다. 그렇지 않은 경우 힙 크기로 1.5G 이상을 지정하지 않을 것입니다. 다른 0.5G 창을 사용하면 JVM에서 직접 사용할 수 있습니다. 커널 모드 코드에 1G 만 사용하고 사용자 모드 코드에 3G 만 사용하도록 창을 설정하는 옵션이 있지만 Sun JVM에서는 사용할 수 없습니다.
vickirk

@vickirk 저는 64 비트 버전의 Windows를 사용 중입니다
Gandalf StormCrow

1
64 비트 버전의 JVM도 사용하고 있습니까? JDK 다운로드 페이지의 드롭 다운 목록에 Windows x64로 표시됩니다. java.sun.com/javase/downloads/widget/jdk6.jsp
Powerlord

답변:


117

설정할 환경 변수는 MAVEN_OPTS예를 들어 MAVEN_OPTS=-Xmx1024m입니다. maxmempom 의 구성은 컴파일러 플러그인을 javac새 JVM 으로 포크하도록 설정 한 경우에만 적용됩니다 . 그렇지 않으면 플러그인은 Maven과 동일한 VM 내에서 실행되므로 명령 줄에서 MAVEN_OPTS.

Windows 7에서 MAVEN_OPTS를 설정하려면

  1. 내 컴퓨터를 마우스 오른쪽 버튼으로 클릭 하고 속성을 선택합니다 (키보드 단축키 Windows+를 누름 Pause/Break).
  2. 클릭 고급 시스템 설정은 디스플레이에 시스템 속성의 왼쪽 탐색에있는 링크하는 고급 시스템 등록 정보를
  3. 고급 탭으로 이동 하여 고급 시스템 속성 구성 창 하단에있는 환경 변수 버튼을 클릭 합니다.
  4. 크리에이트 새로운 사용자 변수의 설정 변수 이름을 MAVEN_OPTS로하고, 설정 변수 값 에을 -Xmx1024m(또는 그 이상)

새 명령 창을 열고 mvn.


1
이것이 내 빌드 속도에 영향을 미칩니 까? 더 많은 메모리를 할당하여 메이븐 빌드를 향상시키는 팁이 있습니까?
Mahendran

45

확실한 (또는 비상 안전) JUnit 테스트 실행 중에 힙 공간이 부족한 경우 MAVEN_OPTS를 변경해도 도움이되지 않을 수 있습니다. 문제를 해결 한이 게시물 을 찾을 때까지 나는 운없이 MAVEN_OPTS에서 다른 구성을 계속 시도했습니다 .

기본적으로 JUnits는 자체 환경으로 분기하고 MAVEN_OPTS의 설정을 무시합니다. JUnits에 더 많은 메모리를 추가하려면 pom에서 surefire를 구성해야합니다.

바라건대 이것은 다른 누군가의 시간을 절약 할 수 있습니다!


편집 : 링크가 언젠가 끊어 질 경우를 대비하여 Keith Chapman의 블로그 에서 솔루션 복사 :

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <forkMode>pertest</forkMode> 
    <argLine>-Xms256m -Xmx512m</argLine>
    <testFailureIgnore>false</testFailureIgnore> 
    <skip>false</skip> 
    <includes> 
      <include>**/*IntegrationTestSuite.java</include>
    </includes>
  </configuration>
</plugin>

업데이트 ( 2017 년 5 월 31 일 ) : 이 점을 지적 해 주신 @johnstosh 에게 감사드립니다 .이 답변을 발표 한 이후 로 확실하게 진화했습니다. 다음은 해당 문서에 대한 링크 와 업데이트 된 코드 샘플입니다 (인수 줄은 여전히이 질문에서 중요한 부분입니다).

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <forkCount>3</forkCount>
        <reuseForks>true</reuseForks>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
        <systemPropertyVariables>
            <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
        </systemPropertyVariables>
        <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory>
    </configuration>
  </plugin>

시간을 절약 할 수있었습니다! 감사! 불행히도 한 번만 찬성 할 수 있습니다! :)
javanna

이것은 실제 메이븐 스타일로 다른 사람들 사이에서 가장 유용한 답변입니다. 감사!
Andremoniy 2014 년

이 질문에 대한 실제 답변입니다
조나단 랜 드럼

1
확실한 문서를 참조하십시오. 2.14 이전의 확실한 버전은 forkMode 매개 변수를 사용하여 분기를 구성했습니다. 이 매개 변수는 이전 버전과의 호환성을 위해 계속 지원되지만 사용자는 구성을 마이그레이션하고 대신 forkCount 및 재사용 Forks를 사용하는 것이 좋습니다.
johnstosh

21

EXPORT 대신 SET을 제외하고 동일한 명령이어야합니다.

  • set MAVEN_OPTS = -Xmx512m은 512Mb의 힙을 제공합니다.
  • set MAVEN_OPTS = -Xmx2048m은 2Gb의 힙을 제공합니다.

나는 그것이 동일한 명령이어야한다는 데 동의하지만 그것이 사실이 아닌 이유입니다C:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Gandalf StormCrow

glowcoder가 약간 잘못되었습니다. 변수를 내보낼 필요는 없지만 변수에 값을 할당하려면 설정해야합니다.
JeremyP

모든 빌드에 동일한 값을 사용하려는 경우 MAVEN_OPTS를 Windows 환경 변수로 설정할 수도 있습니다.
digitaljoel

@Gandalf 당신은 그것 앞에 세트를 넣어야합니다 @Jeremy 그렇습니다, 그것이 수출 대신에 세트를 사용하는 이유입니다
corsiKa

9

Mac : JAVA_OPTS및 대신 MAVEN_OPTS_JAVA_OPTIONS를 사용하십시오. 작동합니다!


이것은 창에서도 작동합니다. 이클립스의 Maven 실행 구성에서 환경 변수로 추가하면 m2e에서 실행 된 테스트에서 더 이상 PermGen 오류가 발생하지 않습니다.
fedeb

3

운없이 MAVEN_OPTS 변수를 사용하려고 시도한 후 저에게 도움 이 되는 이 사이트 를 발견했습니다. 그래서 내가해야 할 일은 기본 VM 옵션에 -Xms128m -Xmx1024m을 추가하는 것이 었습니다.

Eclipse에서 변경하려면 창-> 환경 설정-> Java-> 설치된 JRE로 이동하십시오. 선택한 JRE / JDK를 선택하고 편집을 클릭하십시오.


0

Windows에서 :

환경 변수를 추가합니다 (시스템 변수와 사용자 변수 모두에서 이상한 문제가 있습니다. 여러 곳에서 변수를 가져 오므로 둘 다에 추가합니다).

이름을 MAVEN_OPTS로 지정합니다.

값은 다음과 같습니다. -Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled

숫자는 다를 수 있으므로 mem 크기에 상대적으로 만드십시오.

나는 그 문제가 있었고 이것은 그것을 고쳤습니다.


0

작동했습니다-Eclipse에서 변경하려면 창-> 환경 설정-> Java-> 설치된 JRE로 이동하십시오. 선택한 JRE / JDK를 선택하고 편집을 클릭하십시오.

기본 VM 인수 = -Xms128m -Xmx1024m


-7

다음 두 가지 옵션을 찾고 있습니다 java.

  • -Xmx 최대 힙 크기
  • -Xms 시작 힙 크기

다음 java과 같이 실행 파일 의 명령 줄 호출에 입력합니다 .

java -Xms512M -Xmx1024M my.package.MainClass

애플리케이션에 따라 시작 및 최대 힙 크기를 동일하게 할 수 있습니다. 런타임 중에 힙 크기를 조정하지 않아도됩니다 (응답해야하는 애플리케이션에서 시간이 걸릴 수 있음). 힙 크기를 조정하면 많은 개체를 이동하고 부기 작업을 다시 수행 할 수 있습니다.

일상적인 프로젝트의 경우 충분히 좋다고 생각하는대로 만드십시오. 도움이 필요한 프로필.


1
ebelisle이 언급했듯이 Maven을 사용하는 경우 적어도 "-D"를 사용하여 Maven 옵션을 지정해야하므로이 옵션은 전혀 작동하지 않지만 여전히 Java 명령이 아닙니다.
frandevel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.