【发布时间】:2013-08-17 14:44:34
【问题描述】:
我正在使用 Hibernate 和 Tomcat JDBC 连接池来使用我的 MySQL 数据库。
当数据库因任何原因出现故障时,我的应用程序就会卡住。
例如,我有 REST 资源(使用 Jersey),他们没有收到任何请求。
我也使用石英来安排任务,它们也没有运行。
当我再次启动我的数据库时,一切都恢复正常。
我什至不知道从哪里开始寻找,有人有想法吗?
谢谢
【问题讨论】:
我正在使用 Hibernate 和 Tomcat JDBC 连接池来使用我的 MySQL 数据库。
当数据库因任何原因出现故障时,我的应用程序就会卡住。
例如,我有 REST 资源(使用 Jersey),他们没有收到任何请求。
我也使用石英来安排任务,它们也没有运行。
当我再次启动我的数据库时,一切都恢复正常。
我什至不知道从哪里开始寻找,有人有想法吗?
谢谢
【问题讨论】:
必须发生的事情是您的应用程序必须接收请求,但在建立数据库连接时必须有一些异常。请参阅日志。
尝试一些您没有进行任何数据库操作的流程。它必须工作正常。
【讨论】:
当应用程序挂起时,获取 JVM 的线程转储,它会告诉你每个线程的状态,而不是猜测原因,你会有具体的证据。
话虽如此,并且采用猜测工作方法,很大程度上取决于您的连接池是如何配置的,以及您的代码在收到 SQLException 时采取的操作。如果应用程序完全挂起,那么我的第一个调用端口将是找出数据库访问线程是否处于等待状态,甚至死锁。线程转储将帮助您确定是否是这种情况。
请参阅kill -3 to get java thread dump 了解如何进行线程转储
【讨论】: