这几天项目将上线新版本,但是我们部署在测试环境下的项目,发现近一个来月tomcat服务被关闭多次,之前零零散散的多次查找过原因,通过日志发现
2018-09-14 21:53:50,907 INFO (ConnectionPool.java:484) - Shutting down 'dbPool' pool immediately [Shutdown Hook]
2018-09-14 21:53:50,911 INFO (PrototyperController.java:100) - Stopping Prototyper thread
2018-09-14 21:53:50,911 INFO (HouseKeeperController.java:107) - Stopping HouseKeeper thread
怀疑是数据库连接池的原因,后来扩大了数据库连接池,还是无法解决,怀疑是内存泄漏的原因,发现配置的dump没有写日志。后来查询服务器对应的时间点cpu内存情况,发现一切正常,但是却还是出现tomcat被kill掉,还是大牛出手,分析日志,查找原因,发现一篇网上的文章(https://www.jb51.net/article/98345.htm)里面介绍的tomcat无故退出的原因和操作,正好是我们的问题所在。
以下是例子脚本和故障原因
$ cattest.sh
#!/bin/bash
cd/data/server/tomcat/bin/
./catalina.sh start
tail-f /data/server/tomcat/logs/catalina.out
tomcat启动为后,当前shell进程并没有退出,而是挂住在tail进程,往终端输出日志内容。这种情况下,如果用户直接关闭ssh终端的窗口(用鼠标或快捷键),则java进程也会退出。而如果先ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。