我正在使用 Play 编写一个部署在 Tomcat 中的 Web 应用程序。因为应用程序不会处理太多数据,所以我将默认的 H2 数据库与 Hibernate 一起使用。当我想要部署新版本的应用程序时,我关闭 tomcat,擦除旧的 web 应用程序和 WAR,添加新的 WAR,然后启动备份。
这一直有效,直到几天前,当我添加数据库组件时。现在,我经常无法重新部署该应用程序。当我删除旧目录时,它会自动重新生成,结构如下:
$ 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 解压缩时也会发生同样的情况。
我最近注意到 catalina.out 日志中出现一条消息,抱怨我的应用程序没有关闭一个名为“H2 File Lock Watchdog”的进程。根据对 H2 文档的简要搜索,我认为该过程是干扰我的应用程序的原因。
EDIT
这是日志文件中的抱怨行:
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
or ps
。我更喜欢 Play 自动关闭它的方法,但我不会将其构建到我的部署脚本中。
如果您读到这里,我将万分感谢!
我关闭了tomcat
您确定已经完全关闭tomcat了吗?因为H2数据库仍在运行。如果关闭 tomcat 进程,数据库也会停止(因为 H2 正在 tomcat 进程内运行)。除非您在不同的进程中运行数据库。
或者您刚刚关闭了网络应用程序within雄猫?如果是这种情况,则至少有一个数据库连接未关闭,以便数据库继续运行(并创建此 .lock.db 文件)。
现在,我不知道播放框架,也无法说出如何确保所有数据库连接都关闭。
强制关闭数据库的一种方法是运行 SQL 语句SHUTDOWN
.
我用top或ps找不到看门狗
top
and ps
只显示流程。 H2 看门狗是thread在java进程中。要查看线程,请使用:
jps -l (to get the list of Java processes)
jstack -l <pid> (to get a full thread dump)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)