圣杯: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中部署了一个没有作业的版本,它仍然挂

我在生产中关闭Grails应用程序时遇到问题

从IntelliJ运行时,它会完全关闭。但是在独立的Tomcat7上,关闭会使它进入僵死状态,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
  • 类型
    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而不是关闭它。