톰켓상 reload시 memory leak 관련 fail

154 views
Skip to first unread message

전정철

unread,
Dec 23, 2011, 5:37:07 AM12/23/11
to 한국 Groovy & Grails 사용자 그룹
Grails web application을 톰켓에 올려돌릴 때 톰켓의 매니져 어플리케이션에서 reload. 또는 stop,
start 등을 수행하면 memory leak 관련오류로 실행이 안되는데 혹시 해결 방법 아시는 분 도움 좀 주세요~
1.3.7 및 2.0 모두에서 그렇네요

박성철

unread,
Dec 24, 2011, 9:33:34 AM12/24/11
to kg...@googlegroups.com
오류 메시지를 볼 수 있을까요? 예상컨데 permgen 영역의 메모리 부족 오류 아닐까 싶은데요. permgen 영역을 넓게
잡고 gc가 되도록 jvm옵션을 지정하세요. 해당 오류 메시지로 stackoverflow 같은 곳을 검색하면 해결 방법이 많이
나올 겁니다.

폰이라서 자세한 방법을 알려드리지 못해 죄송합니다.

2011. 12. 23. 오후 7:37 "전정철" <cut...@gmail.com> 작성:

> Grails web application을 톰켓에 올려돌릴 때 톰켓의 매니져 어플리케이션에서 reload. 또는 stop,
> start 등을 수행하면 memory leak 관련오류로 실행이 안되는데 혹시 해결 방법 아시는 분 도움 좀 주세요~
> 1.3.7 및 2.0 모두에서 그렇네요
>

> --
> "한국 Groovy & Grails 사용자 그룹" 에 가입하셨기에 이 메시지를 보내드립니다
> 이 그룹에 게시하려면 다음 주소로 이메일을 보내주십시오.
> KG...@googlegroups.com
> 이 그룹에서 탈퇴하시려면 다음으로 이메일을 보내주십시오.
> KGGUG+un...@googlegroups.com
> 추가 옵션을 보려면 http://groups.google.com/group/KGGUG?hl=ko의 그룹을
> 방문하세요.

전정철

unread,
Dec 28, 2011, 9:39:21 PM12/28/11
to 한국 Groovy & Grails 사용자 그룹
다른 일에 밀려 못해보다가 이제야 다시 해보고 있습니다^^

Grails 2.0 으로 프로젝트를 생성후(추가코딩없이) 바로 war로 만들어서

Apache Tomcat 7.0.22 의 manager 웹프로그램으로 deploy 하여

start되면 reload 버튼 클릭하였을 때의

톰켓 로그는 다음과 같습니다.

Dec 29, 2011 11:28:40 AM org.apache.catalina.core.StandardContext
reload
INFO: Reloading Context with name [/g20sample1-0.1] has started
Dec 29, 2011 11:28:41 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads
SEVERE: The web application [/g20sample1-0.1] appears to have started
a thread named [Timer-1] but has failed to stop it. This is very
likely to create a memory leak.
Dec 29, 2011 11:28:59 AM org.apache.catalina.core.StandardContext
reload
INFO: Reloading Context with name [/g20sample1-0.1] is completed

테스트 환경:
JVM버전 : 1.7.0_01-b08
OS : Linux(Centos 6.0)

전정철

unread,
Jan 2, 2012, 9:34:26 PM1/2/12
to 한국 Groovy & Grails 사용자 그룹
자문자답이 되겠지만
위의 memory leak 의 솔루션을 알아냈습니다.

출처는 http://burtbeckwith.com/blog/?p=73 입니다.

간단하게 Bootstrap 의 destroy 클로져 에 다음처럼 한 line을 추가 하면 해결 되네요.
(리스너를 만들어 WEB.INF에 추가되도록 하는 방법도 가능할 듯)

class BootStrap {

def init = { servletContext ->
}
def destroy = {
DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP.get().clear()
}
}

이렇게 했더니
Timer-1 thread 건은 해결되었는 데 새로운 SEVERE 로그가 뜹니다ㅠ
그렇기 하지만,
Tomcat Manager 어플의 Find Leak 버튼으로는Memory Leak으로 탐지되지 않네요.
(Timer-1 건의 경우에는 탐지됨)

Reply all
Reply to author
Forward
0 new messages