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

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

最新文章

  1. 前端页面开发,最低兼容IE 8的多设备跨平台问题解决!
  2. RF执行顺序
  3. 阿里云服务器远程mysql连不上
  4. Java 经典实例: Unicode字符和String之间的转换
  5. python 模拟登陆,请求包含cookie信息
  6. MATLAB那些常见的命令
  7. python多线程ssh爆破
  8. Tiffany
  9. 嵌入式中的 *(volatile unsigned int *)0x500 解释
  10. JQuery表单验证插件EasyValidator,超级简单易用!
  11. HDU4670 Cube number on a tree 树分治
  12. linux自带抓包工具tcpdump使用说明
  13. SQL从入门到基础–03 SQLServer基础1(主键选择、数据插入、数据更新)
  14. 无人参与安装IIS 6.0
  15. HDU4866 Shooting (要持久段树)
  16. javascript常用的Math对象的方法
  17. Linux中的Buffer 与 Cache
  18. 带着新人学springboot的应用02(springboot+mybatis+缓存 中)
  19. Java EE开发技术课程第三周
  20. javascript 中XMLHttpRequest 实现前台向后台的交互

热门文章

  1. 深入浅出GNU X86-64 汇编
  2. Tomat服务器学习
  3. IOS 跳转页面
  4. Advanced Installer 开始-程序那里增加,快捷方式、卸载软件、官方网站
  5. VmWare 网络模式
  6. Supervisor进程管理配置使用
  7. Delphi Tobject类
  8. 2.03_Python网络爬虫Http和Https
  9. python之命令行可以做的事儿
  10. String、StringBuffer和StringBuilder区别