我在关闭生产环境中的 Grails 应用程序时遇到问题。
从 IntelliJ 运行时,它会干净地关闭。但在独立的 Tomcat 7 上,关闭会使其进入僵尸状态,其中 java 进程仍然存在,但 HTTP 请求挂起。我必须杀死java进程(使用kill)。
我正在使用 Tomcat 的标准 bin/startup.sh 和 shutdown.sh。 Tomcat 停止后,我将 .war 放入 Tomcat 的 /webapps 目录中,然后启动。
我怀疑它可能是 Quartz 作业调度程序插件,但我部署了一个在 grails-app/jobs 中没有作业的版本,但它仍然挂起。
有人以前遇到过这个吗?谢谢!
非守护线程
可能是一个或多个非守护线程仍在运行并阻止 tomcat 成功关闭。
- 打开终端并输入
ps -ef| grep java
并找到你的Tomcat7p_id
- type
kill -3 p_id
- 类型(在您的 Tomcat 目录中)
tail -200 logs/catalina.out
- inspect 线程转储由产生的
kill -3
- 寻找非守护线程
- 检查您的代码以确定该进程仍然存在的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)