圣杯:Tomcat赢了';不要在生产过程中干净地关机
我在生产中关闭Grails应用程序时遇到问题 从IntelliJ运行时,它会完全关闭。但是在独立的Tomcat7上,关闭会使它进入僵死状态,java进程仍然存在,但HTTP请求挂起。我必须终止java进程(使用kill) 我正在使用Tomcat的标准bin/startup.sh和shutdown.sh。停止Tomcat后,我将.war放入Tomcat的/webapps目录,然后启动 我怀疑它可能是Quartz作业调度器插件,但我在grails app/jobs中部署了一个没有作业的版本,它仍然挂起 以前有人见过这个吗?谢谢 非守护进程线程 可能有一个或多个非守护进程线程仍在运行,阻止tomcat成功关闭圣杯:Tomcat赢了';不要在生产过程中干净地关机,tomcat,deployment,grails,quartz-scheduler,Tomcat,Deployment,Grails,Quartz Scheduler,我在生产中关闭Grails应用程序时遇到问题 从IntelliJ运行时,它会完全关闭。但是在独立的Tomcat7上,关闭会使它进入僵死状态,java进程仍然存在,但HTTP请求挂起。我必须终止java进程(使用kill) 我正在使用Tomcat的标准bin/startup.sh和shutdown.sh。停止Tomcat后,我将.war放入Tomcat的/webapps目录,然后启动 我怀疑它可能是Quartz作业调度器插件,但我在grails app/jobs中部署了一个没有作业的版本,它仍然挂
- 打开终端并键入
,找到您的Tomcat7p_idps-ef | grep java
- 类型
kill-3p\u id
- 键入(在Tomcat目录中)
tail-200 logs/catalina.out
- 检查由
kill-3
- 寻找非守护进程线程
- 检查您的代码以确定该进程仍处于活动状态的原因
- 我同意凯雷姆·贝多安的观点。可能有一个非守护进程线程不想停止。线程转储是一种很好的跟踪方法
我建议使用VisualVM连接到远程JVM。对于我来说,这是一个非常宝贵的工具,可以收集有关我正在运行的应用程序的信息。如果你在Mac上,它已经作为操作系统的一部分安装了。在终端中,只需键入“jvisualvm”。如果不是在Mac上,它是从
一旦安装,您可能需要添加几个JVM参数以允许远程连接
截图:
如果您不在Mac上,则无需从VisualVM.java.net下载VisualVM。JavaVisualVM是JDK6更新7中JDK6的一部分。只需转到jdk/bin目录并运行jvisualvm或jvisualvm.exe。谢谢,德里克。VisualVM很酷!但给其他人一个警告:我将JMX属性Derek引用设置为JAVA_OPTS,并在尝试关闭Tomcat时出现以下错误:JAVA.rmi.server.ExportException:端口已在使用:3333。为了修复它,我必须将JMX属性设置为CATALINA_OPTS而不是JAVA_OPTS。VisualVM与Mac Os X SDK捆绑在一起,无需下载。谢谢,这很有帮助!看起来另一个Grails插件正在启动OSGI而不是关闭它。