linux环境中关闭tomcat,通过shutdown.sh无法彻底关闭--线程池
2024-08-31 07:55:13
最近测试环境上测试的项目通过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哦。
最后彻底解决。希望对朋友有所帮助
最新文章
- 前端页面开发,最低兼容IE 8的多设备跨平台问题解决!
- RF执行顺序
- 阿里云服务器远程mysql连不上
- Java 经典实例: Unicode字符和String之间的转换
- python 模拟登陆,请求包含cookie信息
- MATLAB那些常见的命令
- python多线程ssh爆破
- Tiffany
- 嵌入式中的 *(volatile unsigned int *)0x500 解释
- JQuery表单验证插件EasyValidator,超级简单易用!
- HDU4670 Cube number on a tree 树分治
- linux自带抓包工具tcpdump使用说明
- SQL从入门到基础–03 SQLServer基础1(主键选择、数据插入、数据更新)
- 无人参与安装IIS 6.0
- HDU4866 Shooting (要持久段树)
- javascript常用的Math对象的方法
- Linux中的Buffer 与 Cache
- 带着新人学springboot的应用02(springboot+mybatis+缓存 中)
- Java EE开发技术课程第三周
- javascript 中XMLHttpRequest 实现前台向后台的交互