【问题标题】:C3P0 hangs - Java 1,6C3P0 挂起 - Java 1,6
【发布时间】:2013-10-19 05:40:33
【问题描述】:

继续这个Websphere hangs due to c3p0问题

我们的 JSP 应用程序本身是一个遗留代码(大约 5 年前编写的),我们需要在接下来的 3 年内对其进行维护。随着 Oracle 和 WAS 的更新,现有代码变得不稳定。由于成本因素,重写不是一种选择

当我们不得不迁移到 Oracle 11 时,出现了这样一个 problem。经过一些研究,我发现连接池会有所帮助。正确的解决方法是对代码进行更改,但成本是显而易见的。

在使用connection pooing 一段时间后,我们发现WebSphere 中的JSP 应用程序在引入C3P0 后比平常更频繁地挂起。但是引入 c3P0 解决了一个问题Max cursors reached error in JSP + Hibernate

http://www.mchange.com/projects/c3p0/ 的先决条件表明 C3P0 可以很好地与 Java 1.4 和 Java 1.5 配合使用

我们使用的是 Java 1.6.x

有没有人成功让 c3P0 与 Java 1.6 一起工作?

是否有任何提示/微调可以使 c3P0 与 Java 1.6 一起使用?

我的 C3P0 设置

 <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
   <property name="hibernate.c3p0.min_size">2</property>
   <property name="hibernate.c3p0.max_size">40</property>
   <property name="hibernate.c3p0.timeout">350</property>
   <property name="hibernate.c3p0.idle_test_period">300</property>
   <property name="hibernate.c3p0.max_statements">0</property>
   <property name="hibernate.c3p0.acquire_increment">1</property>
   <property name="hibernate.c3p0.unreturnedConnectionTimeout">60</property>
   <property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property>

【问题讨论】:

    标签: jsp jakarta-ee c3p0 java-6


    【解决方案1】:

    c3p0 通常在 java 1.6+ 上运行良好。

    如果您还没有升级到 c3p0 0.9.2.1 或最新的 0.9.5 预发布版(尽管早期版本在 1.6+ 中可以使用),您可能想要升级。

    您需要弄清楚您的应用挂起的原因。通常,在挂起期间,您应该转储线程并检查堆栈跟踪以查看发生了什么。如果线程挂起等待来自 c3p0 的连接(即在 awaitAvailable() 方法中),您可能有连接泄漏,并且需要像在 previous hang thread you reference 中那样对其进行调试。

    【讨论】:

    • 感谢@steve-waldman 的回答。我已经升级到 0.9.5 pre-4,有趣的是在启动过程中出现的错误不再出现,但不幸的是挂起超过 0.9.2.1。我知道我们的应用程序编码非常糟糕,但我的任务是让它“以某种方式”运行。所以 c3p0 是我唯一的选择,因为我们可以通过配置 c3p0 来使用 hte 应用程序。网络应用程序太旧且复杂,无法在短时间内更改。
    • 挂起的好处是它们是可调试的。让您的应用程序挂起,然后让 JVM 转储线程堆栈跟踪(例如,通过 ctrl-\ 或 kill -QUIT 或 Windows 上的 ctrl-break)。线程挂起时在做什么?如果它们在 c3p0 的 awaitAvailable() 中,那么您可能有连接泄漏,您可以按照stackoverflow.com/questions/17272141/… 进行调试,如果没有,那么您至少会知道需要修复什么!
    • 谢谢。我配置了日志,我看到了这个 2013-10-14 10:32:03,191 WARN [ActiveManagementCoordinator] : A C3P0Registry mbean is already registered. This probably means that an application using c3p0 was undeployed, but not all PooledDataSources were closed prior to undeployment. This may lead to resource leaks over time. Please take care to close all PooledDataSources. 知道这意味着什么吗?
    • 是的。如果您不使用 JMX,最简单的解决方法是在 c3p0.properties 中设置或设置为系统属性com.mchange.v2.c3p0.management.ManagementCoordinator=com.mchange.v2.c3p0.management.NullManagementCoordinator 您可能会因为 0.9.2 系列中引入并在最新开发中解决的错误而看到此问题快照(将很快在 c3p0-0.9.5-pre5 发布),或其他原因。此外,如果您使用的是 Tomcat,您可能需要在此处设置指示的配置属性(在 TL;DR 下):mchange.com/projects/c3p0-0.9.5-pre4/#tomcat-specific
    • 感谢@steve-waldman,我们正在使用 WAS 7 和 Hibernate。将检查您提到的属性。
    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 2012-12-15
    • 2012-08-23
    • 1970-01-01
    • 2017-09-16
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多