2011-08-24 2 views
6

Tomcat에 배포 된 Webapp를 작성하려면 Play를 사용하고 있습니다. 응용 프로그램은 대용량 데이터를 처리하지 않기 때문에 최대 절전 모드에서 기본 H2 데이터베이스를 사용하고 있습니다. 새 버전의 응용 프로그램을 배포하려면 tomcat을 종료하고 이전 webapp 및 WAR을 지우고 새로운 WAR를 추가 한 다음 다시 시작합니다. 재생! H2를 올바르게 종료하지 않습니다.

는 며칠 전, 나는 데이터베이스 구성 요소를 추가 할 때까지 일했다. 이제 앱을 다시 배포 할 수없는 경우가 있습니다. 이전 디렉토리를 삭제하면 다음 구조로 자동 생성됩니다.

$ ls -laR myapp/ 
myapp/: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 13 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 WEB-INF 

myapp/WEB-INF: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 application 

myapp/WEB-INF/application: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 db 

myapp/WEB-INF/application/db: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 2 root root 4096 Aug 24 17:20 h2 

myapp/WEB-INF/application/db/h2: 
total 24 
drwxr-xr-x 2 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
-rw-r--r-- 1 root root 100 Aug 24 17:20 play.lock.db 

WAR가 압축 해제 될 때도 마찬가지입니다.

는 최근 "H2는 잠금 워치 독 파일"내 애플처럼 뭔가라는 프로세스를 종료하지에 대해 불평 catalina.out 로그에 의해 메시지 재능을 발견. H2 문서에 대한 간략한 검색을 기반으로 프로세스가 내 앱을 방해하고 있다고 생각합니다.

SEVERE: The web application [/myapp] appears to have started a thread named [H2 File Lock Watchdog /var/lib/apache-tomcat-6.0.32/webapps/myapp/WEB-INF/application/db/h2/play.lock.db] but has failed to stop it. This is very likely to create a memory leak.

그래서, 어떻게이 프로세스를 종료 않습니다

편집

다음 로그 파일의 불평 라인입니까? 내 컴퓨터가 아니기 때문에 컴퓨터를 다시 시작할 수 없으며 top 또는 ps으로 워치 독을 찾을 수 없습니다. Play에서 자동으로 종료하는 방법이 더 좋겠지 만 배포 스크립트에 추가하지는 않습니다.

당신이 이것을 읽었다면 백만에게 감사드립니다!

+0

언급 할 가치가있는 또 다른 포인트는 결국 데이터베이스 프로세스가 결국 죽는다는 것입니다. 얼마나 걸릴지는 확실하지 않지만 몇 시간 만에 확인 할 수 있습니다.그것을 기다리는 것은 일종의 해결책 일 뿐이지 만 아무것도 아닌 것보다 낫다. – andronikus

답변

8

나는

당신이 바람둥이를 완전히 종료 한 확신 바람둥이를 종료? H2 데이터베이스가 실행 중일 때. tomcat 프로세스를 종료하면 데이터베이스도 중지됩니다 (H2가 tomcat 프로세스 내에서 실행 중이기 때문에). 다른 프로세스에서 데이터베이스를 실행하는 경우는 예외입니다.

가 아니면 그냥 바람둥이 내에서 웹 응용 프로그램 를 종료 했습니까? 이 경우 하나 이상의 데이터베이스 연결이 닫히지 않아 데이터베이스가 계속 실행되고이 .lock.db 파일이 만들어집니다.

는 지금, 나는 플레이 프레임 워크를 모르는 및 연결이 닫힌 모든 데이터베이스를 확인하는 방법을 말할 수 없습니다. 종료 데이터베이스를 강제로

한 가지 방법은 SQL 문 SHUTDOWN을 실행하는 것입니다.

내가

topps프로세스을 표시 상단 또는 PS와 감시를 찾을 수 없습니다. H2 워치 독은 자바 프로세스 내에서 스레드입니다. 스레드를 보려면 다음을 사용하십시오.

jps -l (to get the list of Java processes) 
jstack -l <pid> (to get a full thread dump) 
+0

평상시처럼'sh bin/shutdown.sh' 명령으로 서버를 종료하고 있습니다. 내가해야 할 일이 또 있니? 놀이! 프레임 워크는 이런 일을 자동으로 처리하는 경향이 있으므로'SHUTDOWN' 문을 전달하는 법을 모르겠습니다. 나는 월요일에 Java 프로세스를 수동으로 종료하려고 시도 할 것이고 희망적으로 누군가의 발가락을 밟지 않을 것이다. – andronikus

+0

불행히도'jps -l'은 JPS 자체만을 보여줍니다! – andronikus

관련 문제