tomcat의 out of memory 오류를 막기

  • Post author:
  • Post category:칼럼
  • Post comments:0 Comments
  • Post last modified:October 11, 2013

Eclipse에서 Spring Framework 기반의 웹 서비스를 개발한다. Tomcat 서버를 띄워놓은 채 소스코드를 수정하면 자동으로 다시 빌드해서 Tomcat 서버에 반영해주는 기능이 있어 편하다. 그런데 이렇게 소스코드를 수시로 고치다 보면 한번은 out of memory error가 발생한다. 이러면 Tomcat 서버를 내렸다 다시 올려야 하는데 귀찮다. 그래서 다시 구글링!

기본적으론 메모리를 늘려서 해결하면 되겠지만 여러 자료를 살펴보니 한 가지 주의할 점이 있다. Java 힙 메모리만 늘려선 똑같은 오류가 계속 나올 가능성이 있다. 객체의 메타 정보(Reflection에 쓰는)는 일반적인 Java 힙이 아닌 특수한 힙에 들어간다. Spring Framework 등과 같이 메타 정보를 적극적으로 활용하는 프레임워크 때문에 이 특수 힙의 공간이 부족해지곤 한다. 이런 경우에는 아무리 일반 힙의 크기를 늘려봤자 소용 없다. 어느 쪽이 문제인지 잘 모르고 개발 머신의 사양이 낮은 것도 아니라 굳이 찾아볼 생각도 안 하고 이 두 힙의 크기를 모두 늘리기로 했다. 이때 사용한 코드는 다음과 같다.

export CATALINA_OPTS="$CATALINA_OPTS -Xms64m -Xmx512m -XX:MaxPermSize=512m"

각 옵션은

  • -Xms는 Java 힙의 최소 크기
  • -Xmx는 Java 힙의 최대 크기
  • -XX:MaxPermSize는 메타데이터용 힙의 크기

를 뜻한다.

이제 export ~~~ 코드를 어디에 넣을 것인가? ~/.profile 같은 개인용 쉘 구성파일에 넣어도 되겠지만 팀 전체에 한꺼번에 전파시키기 위해 소스 서버에 있는 tomcat 의 소스 코드를 직접 고쳤다. /usr/local/tomcat/bin/catalina.sh 파일을 열고 맨 위에 이 코드를 넣으면 끝!

참고 문헌

글쓴이
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
트위터
  • Dec 6, 2021
    아, 이런 시도가 나쁘다는 말은 아니고 그저 문서만 봐선 더 쉬워보이지 않는다는 정도랄까. 짬날 때 어떤 가치가 있는지 들여다볼 필요가 있겠다
  • Dec 6, 2021
    재택근무하다 말고 온 가족이 선별진료소로 가는 와중에 나는 조수석에 앉아 아이패드와 에어팟으로 원격회의에 참석하고(경황이 없어 취소도 못…) 정신은 없었으나 선별진료소 근방의 주차상황까지 공유가 된 터라… https://t.co/02zsjvFXqK
  • Dec 6, 2021
    유치원에 확진자 나오니 원과 학부모의 신속한 대응이란. 순식간에 가장 대기시간이 짧은 선별진료소가 어디인지까지 서로 정보 공유하고 불과 몇시간 만에 전원이 집에 돌아왔다. 진료소 가는 길에 백신이 전혀 쓸모… https://t.co/9O85nAvva1

Leave a Reply