Używam Play, aby napisać aplikację webową wdrożoną w Tomcat. Ponieważ aplikacja nie przetwarza bardzo dużo danych, używam domyślnej bazy danych H2 z Hibernate. Kiedy chcę wdrożyć nową wersję aplikacji, wyłączam program tomcat, usuwam starą aplikację webową i WAR, dodam moją nową WAR i uruchomię kopię zapasową.Graj! nie wyłączanie H2 poprawnie
To działało do kilku dni temu, kiedy dodałem komponent bazy danych. Teraz często nie mogę ponownie wdrożyć aplikacji. Kiedy usunąć stary katalog, jest on automatycznie regenerowane z tej struktury:
$ 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
To samo dzieje się, gdy wojna rozpina.
Niedawno zauważyłem komunikat o błędzie w dzienniku catalina.out, który narzekał na moją aplikację, nie zamykając procesu o nazwie "Plik blokujący pliku blokady H2". Na podstawie krótkiego przeszukania dokumentów H2 wydaje mi się, że ten proces zakłóca moją aplikację.
EDIT
Oto linia narzekania w pliku dziennika:
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.
Więc jak mogę zabić ten proces? Nie mogę ponownie uruchomić maszyny, ponieważ nie jest ona moja i nie mogę znaleźć stacji monitorującej pod numerem top
lub ps
. Wolałbym, żeby Play automatycznie wyłączył tę funkcję, ale nie jestem ponad jej wbudowaniem w mój skrypt wdrażania.
Dzięki za milion, jeśli przeczytałeś tak daleko!
Kolejnym punktem wartym wspomnienia jest to, że proces bazy danych ewidentnie ginie. Nie jestem pewien, ile czasu to zajmie, ale jest w skali godzin.Czekanie na to jest tylko rodzajem rozwiązania, ale lepsze niż nic? – andronikus