Gradle Test시 Out of memory 이슈

태량·2023년 7월 27일
0
post-thumbnail

테스트 환경에서 치명적인 문제가 하나 있다. 그것은 eunjeon 라이브러리를 사용하는 모든 클래스는 gradle test에서 오류가 난다.

  1. gradle test
  1. 신기하게도 junit을 통한 테스트는 성공 한다.

해결 했는가?

일단 해결 방법은 build.gradle에서 maxHeapSize를 1024m으로 늘려줌으로써 해결 됐다.

gradle 7.5.1 버전을 사용 중인데, gradle doc을 살펴보니 디폴트 heap max size가 512MiB이다.

다른 테스트에선 이 heap size가 문제가 없지만, eunjeon 라이브러리 즉 자연어 분석 라이브러리는 초기화 될 때, 사전 데이터를 메모리에 로딩 하는 것으로 보인다.

이런 식으로 말이다. 근데 이 과정은 대체 메모리를 얼마나 잡아 먹을까?? 도와줘요 VisualVM~~ 확인 해보자!

  1. 서버를 시작한 직후의 visual VM 모습이다.

서버를 시작한 직후 heap dump를 떠보니 heap size는 34,624,312B (32.97MiB)

  1. 이제 로컬 주소로 접속해서, 사전 데이터가 로딩이 되도록 해보자.

바로 치솟는 heap size

621,322,352B(592.51MiB)이다. 처음 보다 약 16.97배 증가 했다..역시나 gradle test default max heap size를 초과 한다.

(이대로 괜찮을까...?? 라이브러리를 바꿔야 하나??)

일단은 검색을 계속 진행해도 크게 변동은 일단 없다.

그래서 결론은?

  1. 일단 gradle test에서의 default max heap size 값을 알았고, 자연어 분석기가 사용하는 메모리가 500MB가 넘는다는 것을 알았다. 그래서 일단은 default 값을 증가 시켜 test에서 heap space 부족 문제는 해결 했다.
  1. APM이 필요하다...!!
  • 로컬 환경에서의 heap size를 봤을 땐 사전 데이터 로딩에 의한 급격한 증가 이후 검색이 증가되도, 크게 변동은 없어서 괜찮다고 판단은 되지만 아직 내가 모르는 것이 많기에 데이터를 쌓고 확인 할 수 있는 수단이 필요하다.
  1. 테스트 코드 보완이 필요하다...!
  • 서비스 구현 때문에 미뤄뒀던 부분의 테스트 코드를 다시 보충하자. 겉으로 흉내만 내는 테스트 코드 대신 진짜 이런 문제들을 찾아 낼 수 있는 테스트 코드를 짜자.
profile
좋은 영향력과 교류를 위하여

0개의 댓글