我们使用hibernate/mysql在Tomcat中运行了许多web服务。我怀疑其中一些程序配置不正确,因为几个小时后,一些单独的应用程序就会耗尽连接并停止响应。我们一直在更改连接池服务(在本例中是C3P0),但为了向后兼容,我们仍然需要将应用程序的旧版本保留在服务器上。
无论如何,我怀疑这些应用程序也损害了tomcat的整体稳定性。大约每周一次,我们的服务器完全停止响应,甚至无法提供静态页面。在重新启动服务之后,每件事都会再持续几天左右。从日志中可以看出几乎没有任何不寻常的异常,所以我不确定是什么原因导致tomcat崩溃。遗憾的是,在服务器退出响应之前,错误日志中没有列出值得注意的内容。
我们也在考虑改用JBoss,因为它更“进取”,但我不相信它能解决这些问题。是否有任何令人信服的理由来切换web平台,或者我是否应该在我们自己的web应用程序中进一步调试?另外,bad应用程序是否有可能通过做一些坏事来使应用程序服务器崩溃?
服务器配置:Windows2003Server,Tomcat6.0.18+ blazeDS 3.0,Hibernate 3.2。
发布于 2009-05-17 20:39:02
我认为没有人会知道你的问题的答案,但只有领导和想法。以下是一些:
我的建议是,没有剩下来的tomcat进程,因为它们都在等待资源(可能是数据库连接,或者只是一个无限循环!)我之前列出的工具肯定会帮助您理解为什么您的服务器每周都在缓慢死亡。
netstat,查看到数据库服务器的连接数量(并对照池大小和数据库服务器容量检查它)。发布于 2009-05-17 20:29:24
如果为静态页面提供服务不需要任何数据库访问,那么似乎不太可能是数据库资源问题本身。可能所有的池线程都卡在某个地方,例如等待数据库驱动器或死锁。我要做的第一件事是用jstack获取堆栈跟踪的快照。您可以使用visualvm或jconsole进一步查看该过程。
发布于 2009-05-17 20:36:26
只想补充一句,MyISAM表中的表锁定问题很常见,这很容易导致DB连接堆积,并导致应用程序等待这些结果。
您可能希望签出MySQL进程列表,以查看是否有许多查询处于锁定状态。
# mysqladmin processlist
-或者
mysql> show processlist;
如果锁定是问题所在,您将希望查看将问题表上的存储引擎从MyISAM更改为InnoDB是否可行。
https://serverfault.com/questions/9110
复制相似问题