标签: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方法执行能够结束这两个进程,问题解决。
标签:des os io 使用 java ar 文件 art 问题
原文地址:http://www.cnblogs.com/xiaoxiaff/p/3949951.html