728x90
반응형
SMALL
반응형
SMALL

결국은 한번 만나버린 OutofMemoryError.

회사에서 자바로 플러그인 개발을 하고 사용을 쭉 하다가 이런 에러가 생겼다.

 

우선, 어떻게 해결할지 난감해서 구글링을 계속 하면서 해결해보고자 했는데 아무리 해도 안된다.

처음 해본 방법은 다음과 같이 실행 명령어에 최대 크기를 늘리는것.

mvn clean package -DskipTests -DactivatedProperties=prod -Dspring-boot.run.jvmArguments="-Xmx8192m"

 

그러나 해결되지 않았다. 왜 해결되지 않는지 모르겠는데 왜 해결되지 않는지 구글링을 해보니 이러이러한 이유가 있다고 한다.

애플리케이션 실행에만 영향을 주는 옵션, 이 애플리케이션을 구동하는 JVM 자체에는 영향을 주지 않는다. (JVM의 최대 크기가 이것보다 작기 때문에 의미가 없다)

 

이 말은, 결국 JVM의 최대 크기 자체를 늘려야 한다는 것인데.. 어떻게 해야하나 ? 다시 검색 ! 

"export JAVA_OPTS="-Xmx512m"
 "export CATALINA_OPTS=-Xmx512m"

 

이 방법도 실패. 이유는 모든 JVM이 이를 인지하는 것이 아니라는 가능성.

 

마지막 방법을 찾았다. 내 경우에는 CentOS 배포판으로 된 Linux 서버에 올려놓은 플러그인이고 여기서 JVM 최대 Heap Size를 늘리는 방법은 /etc/profile에 맨 위에(어디에든 상관없긴 하다만) 다음과 같이 설정을 하면 된다.

export _JAVA_OPTIONS=-Xmx6g

 

그 후 파일 변경을 적용하기 위해 다음 명령어를 실행

source /etc/profile

 

그럼 적용한 값을 확인할 수 있는데 다음 명령어로 확인해보자.

java -XshowSettings:vm

 

다음과 같은 화면을 볼 수 있다. 내가 적용한 설정값이 반영된 상태로 Max Heap Size가 적용됐다. 

 

 

그런데, 나는 Docker Container 환경에서 서버를 구동중이다.. 그러니까 내 Linux 서버에서 JVM heap size를 늘리나 마나 아무런 의미가 없다. 그래서 만약 Container의 JVM heap size를 늘리고 싶으면 !

 

docker compose를 사용할 때와 이미지를 가지고 실행하는 경우 두 가지 방법이 있다.

나 같은 경우 docker compose를 사용하는데 그럴 경우에는 이렇게 적용하면 된다.

 

docker-compose.yml

environment:
	- _JAVA_OPTIONS=-Xmx8g

 

(tomcat) image를 가지고 컨테이너를 실행하는 경우 (이미지는 원하는 대로)

docker run -e JAVA_OPTS='-Xmx1g' tomcat

 

 

728x90
반응형
LIST

+ Recent posts