这2天系统宕机了5次,查看后台日志发现tomcat报all threads are currently busy。
把tomcat的最大线程调到500,依然没解决问题。
于是用jconsole连接上服务器,发现所有的空闲线程都被以下代码占用:
ExtAlarmMonitorAction.loadAlarmData()
查看该方法,发现如下代码:
在某些场景下,永远无法获得cb,于是该线程被无限期占用。tomcat新创建的空闲线程,也很快被占满,直到最大线程数溢出。
修改死循环代码后,重新发布测试,系统没有再出现宕机现象。问题解决。
把tomcat的最大线程调到500,依然没解决问题。
于是用jconsole连接上服务器,发现所有的空闲线程都被以下代码占用:
ExtAlarmMonitorAction.loadAlarmData()
查看该方法,发现如下代码:
while(null==cb){
Thread.sleep(500);
cb = getCurrentConditionBean();
}
在某些场景下,永远无法获得cb,于是该线程被无限期占用。tomcat新创建的空闲线程,也很快被占满,直到最大线程数溢出。
修改死循环代码后,重新发布测试,系统没有再出现宕机现象。问题解决。