Justin의 개발 로그
article thumbnail

gradle로 테스트를 돌리다 보면 아래와 같이 heap memory 부족 문제가 발생하는 경우가 있다.

Caused by: java.lang.OutOfMemoryError: Java heap space

 

여러 문서들에서는

gradle.properties에서는 아래와 같은 형태로 메모리를 늘리면 된다

org.gradle.jvmargs=-Xmx2g

 

라고하는데 적용을 해도 계속 동일한 에러가 발생한다.

 

 gradle.properties는 gradle daemon과 관련된 설정으로 

 org.gradle.launcher.daemon.bootstrap.GradleDaemon 의 heap size 설정만 변경되며, 
실제 build를 수행하는애들은 worker의 heap size(500MB)는 변경이 되지 않는다.

 

 workers, including compilers and test executors, now start with 512MB of heap. 

https://docs.gradle.org/current/userguide/upgrading_version_4.html#rel5.0:default_memory_settings

 

 

조치 방법

build.gradle  파일의 test Task에 아래와 같이 maxHeapSize를 지정하면 해결된다.

 

tasks.named('test') {
    maxHeapSize = "2048m"
    useJUnitPlatform()
}

 

또는

test {
  maxHeapSize = "1024m" //원하는 만큼 변경
}

 

멀티 프로젝트 라면...

subprojects {
  test {
    maxHeapSize = "1024m" //원하는 만큼 변경
  }
  
  ...
}

 

 

또 다른 방법으로는 IntelliJ Preferences 에서 

Gradle 설정의 Run Test using 을 Gradle에서 IntelliJ 로 변경하면 
Gradle을 사용하지 않기 때문에 문제가 발생하지 않지만, 

왠지 문제를 회피하는 것 같아서 해결 방법을 찾았다.

 

 

그런데 Bulk Data Insert 와 같은 CPU, Memory에 부하가 걸리는 작업은

Gradle Run Tests 보다 IntelliJ가 두 배 정도 성능이 빠르다는 것은 함정~ㅋㅋㅋ

 

100만건 데이터 Bulk Insert with Parallel 실행 시간

Gradle  : 80 초

IntelliJ  : 32 초

profile

Justin의 개발 로그

@라이프노트

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!