0. Tomcat shutdown errors?
- tomcat shutdown.bat 실행했는데 tomcat console 창이 닫히지 않는다.
- console log를 살펴 보면 "심각: The web application [] appears to have started a thread named ......" 이라고 찍혀있는데 대부분 user thread 처리에 대한 내용이다.
- 사실 shutdown 시 발생하는 에러는 심각한 내용이 아니라서 그냥 넘어 갈수도 있는데, nightly build script 작성시 골치가 아프다.
1. Java Thread (Thread VS. Daemon Thread)
- Java thread에 대한 이해가 선행되어야 한다.
- "JVM doesn’t wait for any daemon thread to finish before exiting"
- 아래는 shutdown 후 java process를 확인해 봤다. 아직 종료되지 않은 user thread가 3개가 있다.
2. A thread named [Timer-0]
문제가 되는 code snippet이다. 한 번 살펴보자.
public class xxx {
public static void init(){
Timer t= new Timer();
t.scheduleAtFixedRate(new xxxTask (), new Date(), 1000);
}
}
public class xxxTask extends TimerTask {
@Override
public void run() {
......
}
}
- 원인: 위 코드는 TimerTask를 이용하여 user thread를 시작했으나 중지 하는 코드가 없다.
해결 방법: tomcat 종료 시 callback 호출을 통해 user thread를 중지시킨다.
- web.xml에 servlet context listener 등록하고
<listener>
<listener-class>pkg.xxx</listener-class>
</listener>
- ServletContextListener 구현하면 된다.
public class xxx implements ServletContextListener{ @Override
public void contextInitialized(ServletContextEvent arg0) {
t= new Timer();
t.scheduleAtFixedRatenew xxxTask(), new Date(), 1000);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) { t.cancel();
xxxTask.cancel();
}
}
3. A thread named [pool-17-thread-1]
- 문제가 되는 서버는 MINA를 사용하고 있다. 아래는 MINA Architecture다.
이따가 계속


댓글 없음:
댓글 쓰기