码迷,mamicode.com
首页 > 编程语言 > 详细

linux环境中关闭tomcat,通过shutdown.sh无法彻底关闭--线程池

时间:2018-06-02 13:28:04      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:home   font   图片   查找   cat   代码   技术   需要   最好   

  最近测试环境上测试的项目通过shutdown.sh始终无法彻底关闭。

  之前临时解决方法两种:

  第一:通过ps -ef|grep tomcat查看到tomcat的进程直接使用kill来杀死进程。

      第二: 基本原理为启动tomcat时记录启动tomcat的进程id(pid),关闭时强制杀死该进程

               1.找到tomcat下bin/catalina.sh文件,vi进去添加点东西,主要是记录tomcat的pid,如下:

技术分享图片  

大概在第125行左右,添加如下代码

#设置CATALINA_PID(后加)
if [ -z "$CATALINA_PID" ]; then
      CATALINA_PID=$PRGDIR/CATALINA_PID
      cat $CATALINA_PID
fi

保存即可。

2.vi进shutdown.sh文件,在最后一行如下红圈-force:

技术分享图片

保存即可.

 

  但是始终未解决根本问题。查找问题思路:通过java自带的工具jps或者linux自带命令查找线程。这里直接使用jps。找到线程

       再执行jstack pid,出现错误类似这样

技术分享图片

方法一:从tomcat下项目入手,一般造成这种原因是因为项目中有非守护线程的存在。那么怎么找到改线程呢,请看下面:

 

利用jdk 提供的jstack可以帮助我们找到:
$JAVA_HOME/bin/jstack  <pid>
pid是指进程ID, 用ps -ef|grep tomcat 就可以查看到:
技术分享图片

 

12126即为pid,继续输入jstack 12126会看到如下一堆东西:

技术分享图片

技术分享图片

还有一堆的线程池错误信息,上面截图是抄网上其他朋友们的,但是这堆信息和我差不多,。线程无法停止。再综合考虑code,发现code再关闭tomcat里没有调用关闭线程池的方法。这里需要手动关闭下,贴上代码

 技术分享图片

技术分享图片

如果使用spring的线程池,最好也要加上destroy-method哦。

 技术分享图片

最后彻底解决。希望对朋友有所帮助

 

linux环境中关闭tomcat,通过shutdown.sh无法彻底关闭--线程池

标签:home   font   图片   查找   cat   代码   技术   需要   最好   

原文地址:https://www.cnblogs.com/lanweijava/p/9125134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!