有没有办法释放饱和的连接池?

时间:2009-05-03 11:34:39

标签: java database connection-pooling ibm-midrange open-esb

我在glassfish服务器上使用open esb。 我们有一个与as400数据库一起使用的连接池。

每隔几天我们就会收到此错误: 分配连接时出错。原因:使用中的连接等于最大值 池大小和过期的最大等待时间。无法分配更多连接

缓解cp的最佳方法是重启服务器。 我们还设法设置了另一个具有相同属性的cp。

我的问题是: 有没有办法主动“告诉”cp释放所有打开的连接?

干杯, 叶兰

4 个答案:

答案 0 :(得分:5)

在此之前,找出未正确释放连接的原因。听起来有一个地方会被遗忘(你在finally子句中都有close()吗?)。

我强烈推荐Michael Nygards“发布它!”用于使软件生产准备就绪的技术。

编辑#1:如果我正确理解你的描述你的后端程序进入QSYSOPR中的MSGW,这导致挂起连接,直到给出响应,在你的情况下接近永远不会。是否可以选择使用默认回复为“C”的配置文件,它允许故障作为例外传播给您?

否则,您可以为24小时的连接或整个服务器设置超时时间?然后至少连接将最终关闭。该解决方案虽然不能扩展,但可以使开发更容易。

请注意,也可以有一个单独的监控线程,定期查找MSGW并在抓取回拨堆栈后自动发送答案进行死后分析。

答案 1 :(得分:1)

如果您可以在几秒钟内确定“正常”连接使用的上限,则可以使用GlassFish的连接泄漏检测机制。在GF的管理控制台(我使用v2.1)中,转到Resources / JDBC / Connection Pools / [your cp] / Advanced,在Connection Settings下将Leak Reclaim设置为true,并设置Leak Timeout的时间(秒)。

答案 2 :(得分:1)

我遇到了这个问题,原来是交易管理。将@TransactionManagement(TransactionManagementType.BEAN)添加到类中解决了问题。在我的情况下,我不想要任何交易代码,但您的里程可能会根据您的要求而有所不同。

答案 3 :(得分:0)

您在对Andersen的评论中提到您正在收到AS400消息。您可以设置这些消息的自动答案,以避免打开异常消息。检查AS400上的WRKRPYLE(工作回复列表条目)命令,以自动回复这些错误并避免挂起。

相关问题