今天早上更新了一下应用,shutdown.sh,再start.sh,然后发现所有的应用都无法访问了,就是没反应,也不回应拒绝访问等错误信息,就僵死在那里,检查了半天才发现在shtdown.sh后,仍然有进程在监听8080端口,导致重新启动tomcat时无法绑定端口而失败,继续google发现原来很多情况都能造成tomcat无法关闭线程(最典型的就是用了ssh框架)的情况,手动杀线程后搞定问题,但是这个问题实在太不爽了,我的tomcat是需要经常重启来更新测试应用的,这经常僵尸太不爽了,求正确的安全重启tomcat方法
kill -9 pid .再重启就行了
关不掉tomcat,你得首先查代码
是不是有线程卡死了
是不是有socket卡死了
等等,关不掉不是tomcat的错,是你开发人员的错!
不过个人觉得tomcat本身的处理也是有问题的,shutdown失败不会有任何提示,再startup还会成功,我有时候就是猛然发现tomcat运行了一批实例.jetty在这方面做得比较好,在启动或者停止脚本里面加一个循环,用PS来看进程是不是还在,其实也不是很麻烦的事,tomcat就没处理这种情况。
一个很简单的用ssh实现的bs框架,在前台页面对一个数据库实现crud而已,完全是照搬教科书,这样的程序到底有什么问题呢?而且这个情况不是每次都出现的,就是偶尔才有