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

  最近测试环境上测试的项目通过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哦。

 

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

 

转载于:https://www.cnblogs.com/lanweijava/p/9125134.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值