outofmemory는 생성되는 객체를 위해 더 이상 할당해줄 메모리 공간이 없다는 의미인데...
java에서 memory를 할당해주는 놈은 tomcat을 실행시킨 jvm이죠.
그러면 jvm에 보다 많은 메모리를 제공하면 문제가 해결된다고 생각했었습니다.
jvm의 메모리 관리에 개발자가 영향을 미칠 수 있는 가장 쉬운 방법은 java가 실행될 때 Xms Xmx등의 메모리 관련 옵션을 사용하는 것입니다.
< 다음은 sun jvm의 경우입니다.>
아마.. 아무런 옵션을 주지 않으면 디폴트로 가용한 메모리 크기가 128M인가로 설정이 되는데요..
그래서 예를 들면 tomcat의 catalina.sh에 다음과 같은 값으로 option을 조정하였습니다.
JAVA_OPTS="-Xms512m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=64m -XX:NewSize=400m -XX:MaxNewSize=400m -XX:SurvivorRatio=4 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC"
Xms, Xmx, permsize, newsize survivorRatio등의 옵션을 적절히 사용하면 아마 outofmemory 문제를 해결할 수 있을 것입니다. 위의 숫자설정에 대한 가이드는 javaservice.net이나 웹에서 outofmemeory로 검색해보시면 좋은 아티클이 많습니다.
그리고 위의 예제 코드가 무사히 실행을 마치고 실행스택에서 빠진 후에 GC가 발생하면 메모리가 줄어들 것 같네요.
◈ 톰캣 힙 메모리 조정하기 (윈도우용)
1. ( 톰캣 실행 파일 catalina.bat 수정 ) catalina.bat 파일 내에 해당 내용을 입력한다.
set JAVA_OPTS=-server -Xms128m -Xmx128m
시작 > 실행 > cmd (도스창들어간후) > catalina.bat stop 실행
시작 > 실행 > cmd (도스창들어간후) > catalina.bat start 실행
2. 서비스 시작 / 종료 파일생성
tomcat_start.bat ( 서비스 시작 )
C:
cd C:\Program Files\Apache Group\Tomcat 4.1\bin\
catalina.bat start
tomcat_stop.bat ( 서비스 종료 )
C:
cd C:\Program Files\Apache Group\Tomcat 4.1\bin\
catalina.bat stop
◈ 톰캣 힙메모리 조정하기 (리눅스용)
vi ./startup.sh ( 톰캣 실행 파일 startup.sh 수정 )
#!/bin/sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
#
# $Id: startup.sh,v 1.2 2002/01/15 02:55:38 patrickl Exp $
# -----------------------------------------------------------------------------
# resolve links - $0 may be a softlink
PRG="$0"
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
PRGDIR=`dirname "$PRG"`
##############512m로 강제 셋팅 : START
export CATALINA_OPTS="-Djava.awt.headless=true -Xms512m -Xmx512m"
##############512m로 강제 셋팅 : END
EXECUTABLE=catalina.sh
######## ms, mx 값은 CPU의 갯수와 MEM크기에 따라 적절히 조정합니다. (EX:-Xms512m -Xmx512m )
# Check that target executable exists
if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
echo "Cannot find $PRGDIR/$EXECUTABLE"
echo "This file is needed to run this program"
exit 1
fi
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
'SERVER > TOMCAT' 카테고리의 다른 글
톰캣 서버 설정 참조 (0) | 2017.01.16 |
---|---|
64비트 데이터모델을 써보자 (0) | 2016.01.26 |
Apache Tomcat reload (java 파일 변경 내역 자동반영) (0) | 2015.11.03 |
Tomcat 7 에서 web.xml에 사라졌다. (0) | 2015.04.07 |
[OS][LINUX][apache][tomcat]was/web 연동 (0) | 2014.05.13 |
[OS][LINUX][tomcat]server.xml 설정 (0) | 2014.05.13 |
eclipse 3.5 와 Tomcat 6 메모리 (0) | 2014.04.02 |
[Tomcat] 톰켓 catalina.sh 메모리 설정 및 로그 위치 변경 (0) | 2014.03.13 |