Tôi đang sử dụng Play để viết một ứng dụng web được triển khai trong Tomcat. Bởi vì các ứng dụng sẽ không được xử lý dữ liệu rất nhiều Tôi đang sử dụng cơ sở dữ liệu H2 mặc định với Hibernate. Khi tôi muốn triển khai một phiên bản mới của ứng dụng, tôi tắt tomcat, xóa webapp cũ và WAR, thêm WAR mới của tôi và bắt đầu sao lưu.Phát! không tắt H2 đúng cách
Điều này đã hoạt động cho đến vài ngày trước, khi tôi thêm thành phần cơ sở dữ liệu. Bây giờ, tôi thường không thể triển khai lại ứng dụng. Khi tôi xóa thư mục cũ, thư mục được tự động tạo lại với cấu trúc này:
$ 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
Điều tương tự cũng xảy ra khi WAR giải nén.
Gần đây tôi đã nhận thấy một thông báo trong nhật ký catalina.out phàn nàn về ứng dụng của tôi không tắt quá trình được gọi là "Công cụ theo dõi khóa tệp H2". Dựa trên một tìm kiếm ngắn gọn về tài liệu H2, tôi nghĩ rằng quá trình đó là những gì gây trở ngại cho ứng dụng của tôi.
EDIT
Đây là dòng than phiền trong file log:
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.
Vì vậy, làm thế nào để tôi giết quá trình này? Tôi không thể khởi động lại máy vì nó không phải của tôi và tôi không thể tìm thấy cơ quan giám sát với top
hoặc ps
. Tôi muốn một cách để Play tắt nó một cách tự động, nhưng tôi không ở trên xây dựng nó thành kịch bản triển khai của tôi.
Cảm ơn một triệu nếu bạn đã đọc sách này đến nay!
Một điểm đáng lưu ý khác là quá trình cơ sở dữ liệu rõ ràng đã chết cuối cùng. Tôi không chắc là phải mất bao lâu, nhưng nó trên quy mô giờ.Chờ đợi nó ra chỉ là một giải pháp, nhưng tốt hơn là không có gì? – andronikus