码迷,mamicode.com
首页 > 其他好文 > 详细

Tomcat执行shutdown方法后无法彻底关闭问题

时间:2014-09-01 21:05:03      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:des   os   io   使用   java   ar   文件   art   问题   

对tomcat进行了一些改写,使得tomcat能够响应新的协议请求。

在改写完毕以后,在eclipse上debug没有任务问题,便将改写后的tomcat打成jar包,替换原本的apache-tomcat-6.0.37目录下lib文件夹内的对应jar包。

执行startup.sh后一切正常,程序和debug的结果一致。

但是执行了一次shutdown后再执行一次startup发现无法获取Mapper对象。

ps -ef发现java进程有好多没有关闭,因此考虑是线程的生命周期没有控制好导致tomcat运行结束后线程依旧没有关闭。

进入JAVA_HOME目录下bin文件夹,找到命令jstack,jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。

命令格式:

jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP

 

使用jstack打印信息后,发现有两个没有结束的进程,以及由于这些进程导致的其他无法关闭的进程,因此在shutdown命令执行后,无法完全关闭tomcat,导致第二次启动时会出现bug

 

定位到这两个进程,发现都是在run()方法中使用了while(true)使得程序无法正确终止,最后在新写入的Protocol类中实现的destroy方法内,将这两个线程的while判断条件做了限制,使得destroy方法执行能够结束这两个进程,问题解决。

 

Tomcat执行shutdown方法后无法彻底关闭问题

标签:des   os   io   使用   java   ar   文件   art   问题   

原文地址:http://www.cnblogs.com/xiaoxiaff/p/3949951.html

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