Tomcat在shutdown.sh之后,进程仍然存在的原因

    在linux环境下,tomcat 执行shutdown.sh之后,进程仍然存在,这是个让人头疼的问题,个人认为最根本的原因是有一些非deamon thread 存在,这种情况下,tomcat关闭后,整个进程并不会结束。如何判这种情况呢?

    大家可以按照以下步骤去判断:

    1、找到tomcat当前运行的pid(使用ps -ef |grep tomcat),

    2、找到jdk的目录,可以使用which java 命令,并切换到bin目录

    3、在bin目录下执行jstack pid,查看每个thread,找出非deamon thread,进而判断这些thread为何没有停止


例:之前我遇到过的一个场景是在使用Quatz的定时任务,由于没有设置定时任务为deamon的,造成tomcat的进程没有停止。后来配置了Quatz的thread为deamon thread就把这个问题解决了。下面是相关配置,

        <property name="quartzProperties">

    <props>

    <prop key="org.quartz.scheduler.makeSchedulerThreadDaemon">true</prop>

    <prop key="org.quartz.threadPool.makeThreadsDaemons">true</prop>

    </props>

   </property>

以上配置放在了class="org.springframework.scheduling.quartz.SchedulerFactoryBean" 的bean配置项中。



你可能感兴趣的:(tomcat,linux,quatz)