这是一台机器上启动多个tomcat遇到的问题。程序在开发机上用jetty跑没有问题。但是部署到测试机上却出问题了。而且时而正常,时而卡住。非常诡异。
看日志,一直卡在
Initializing Spring root WebApplicationContext
后面就没有日志了。
将Spring开启debug日志级别,catch可能的exception,统统没用。在网上能查到的说法都是可能某个线程连接数据库卡住了(要么是数据库地址配置不对,要么是数据库服务器暂时不可用),但是都不符合我的情况。
后来用了一个超好用的工具jstack,直接打印出堆栈情况。注意要用启动tomcat的用户执行这个命令,例如我用user_00启动tomcat,用root执行jstack都没法得到正确输出。
然后发现问题所在,main线程和另一个定时任务死锁了,他们都调用了Spring framework的getBean方法。具体还没有仔细分析。
所以如果再遇到卡住的问题,可以试试jstack。