Java8 메모리 설정과 GeoServer

지도 렌더링 서비스를 제공하는 GeoServer를 위한 메모리 설정이라고 했지만,
Java8을 사용하는 모든 애플리케이션에 해당한다.

Java8부터는 메모리 설정시 ‘-XX:PermSize= -XX:MaxPermSize=’를 사용하지 않는다.
대신, ‘-XX:MetaspaceSize= -XX:MaxMetaspaceSize=’를 사용한다.

Perm 영역에 대한 관리 문제(Out of Memory와 GC 성능)로 Perm+Native 영역을 통합해
Metaspace 영역으로 제공한다.

이로인한 장점은,
PermGen 영역이 삭제되어 heap 영역에서 사용할 수 있는 메모리가 늘어났다.
PermGen 영역을 삭제하기 위해 존재했던 여러 복잡한 코드들이 삭제 되고 PermGen영역을 스캔 하기 위해 소모되었던 시간이 감소되어 GC 성능이 향상 되었다.
** 출처: JDK8에선 PermGen이 완전히 사라지고 Metaspace가 이를 대신 함

정리하면
Java7 메모리 구성: new/ survive/ old/ perm/ native
Java8 에서는: new/ survive/ old/ metaspace 로 변경되었음
** 참고: JAVA8 Permanent 영역은 어디로 갔는가

이를 GeoServer에 적용해 보면,

설치후 기본 메타정보를 조회 요청 한번 하면, 메모리 문제로 뻗어 버린다.

http://localhost:8080/geoserver/wms?
service=wms&
version=1.1.1&
request=GetCapabilities

서버 로그에는 다음과 같이 남아 있다.

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f925f000, 39886848, 0) failed; error='메모리를 없습니다' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 39886848 bytes for committing reserved memory.
# An error report file with more information is saved as:

JVM 메모리 문제이므로, Java의 실행옵션을 변경해 주면 된다.
* 수정대상: “/bin/startup.sh”

# (생략)....................

# if not told otherwise pump up the permgen
if [ -z '$JAVA_OPTS' ]; then
  #JVM Option for JRE 7 and lower version
  #export JAVA_OPTS='-XX:MaxPermSize=128m'

  #JVM Option for JRE 8 <== 요기다!!
  export JAVA_OPTS='-XX:MaxMetaspaceSize=512m -XX:MetaspaceSize=256m'
fi 

cd '$GEOSERVER_HOME'

echo 'GEOSERVER DATA DIR is $GEOSERVER_DATA_DIR'
#added headless to true by default, if this messes anyone up let the list
#know and we can change it back, but it seems like it won't hurt -ch
exec '$_RUNJAVA' $JAVA_OPTS -DGEOSERVER_DATA_DIR='$GEOSERVER_DATA_DIR' -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KE

메모리를 늘린만큼 서버가 굼떠지겠지만, 암튼 죽지않고 작동된다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: