我在 glassfish 服务器上使用开放式 ESB。 我们有一个与 as400 数据库配合使用的连接池。
每隔几天我们就会收到这个错误: 分配连接时出错。原因:使用中的连接数等于 max- 池大小和过期的最大等待时间。无法分配更多连接
解除cp最好的办法就是重启服务器。 我们还设法设置为另一个具有相同属性的 cp。
我的问题是: 有没有办法主动“告诉”cp 释放所有打开的连接?
干杯, 伊兰
最佳答案
在这样做之前,找出连接未正确释放的原因。听起来好像只有一个地方忘记了这一点(finally 子句中有所有 close() 吗?)。
我强烈推荐 Michael Nygards 的“释放它!”了解使软件生产做好准备的技术。
编辑#1:如果我正确理解您的描述,您的后端程序会进入 QSYSOPR 中的 MSGW,这会导致连接挂起,直到给出响应为止,这在您的情况下几乎是永远不会。是否可以选择使用默认回复为“C”的配置文件,从而允许故障作为异常传播给您?
否则您可以为连接或整个服务器设置 24 小时的超时时间?那么至少连接最终会被关闭。虽然此解决方案无法扩展,但可以使开发更容易。
请注意,也可以有一个单独的监视线程定期查找 MSGW,并在获取回调堆栈以进行事后分析后自动向他们发送答复。
关于java - 有没有办法释放饱和的连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816835/