首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得的连接突然增长,导致服务器崩溃。

问获得的连接突然增长,导致服务器崩溃。
EN

Stack Overflow用户
提问于 2016-12-08 12:55:38
回答 2查看 677关注 0票数 0

我有一个Java应用程序,它每隔1分钟就安排一次cron作业。我们使用Hibernate和JTA实体管理器一起管理容器,用于执行SQL Server数据库上的查询。

JDBC连接池设置如下:

初始和最小池大小:16

最大池大小:64

池调整数量:4

空闲超时:300

最大等待时间:60000

运行22小时后的JDBC连接池统计:

NumConnUsed 0计数

NumConnAcquired 14404计数

NumConnReleased 14404计数NumConnCreated 16计数

NumConnFree 16计数

获得的连接数量不断增加,Glassfish 4在大约10天后崩溃,只有以下例外。

RAR5117 :无法从连接池com.beonic.tiv5获得/创建连接。原因: com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException:在XAResource.start期间异常:

请建议如何避免玻璃鱼坠毁。

EN

回答 2

Stack Overflow用户

发布于 2016-12-08 13:53:40

代码语言:javascript
复制
finally 
{ 
em = null;
 ic = null; 
} 

我认为这是一个问题,你永远不会背诵或关闭传输给出JTA检查5.2.2的示例和文档

代码语言:javascript
复制
// BMT idiom
@Resource public UserTransaction utx;
@Resource public EntityManagerFactory factory;

public void doBusiness() {
    EntityManager em = factory.createEntityManager();
    try {

    // do some work
    ...

    utx.commit();
}
catch (RuntimeException e) {
    if (utx != null) utx.rollback();
    throw e; // or display error message
}
finally {
    em.close();
}

这是进行转运的正确方法。但是,您只是在对值进行空化,而不是更多,这就是为什么您的池没有被关闭以下是有关事务的更多文档的原因。

票数 0
EN

Stack Overflow用户

发布于 2016-12-09 08:48:44

很难说问题的真正原因是什么,但问题可能是,所有的连接都变得陈旧,因为很长时间没有使用。

设置连接验证是一种很好的做法,它可以确保连接在外部服务器关闭时重新打开。

有一篇关于玻璃鱼/Payara中的连接池的详细文章,特别是关于Connection validation的部分(在示例中使用Derby ):

打开连接验证: asadmin set resources.jdbc-connection-pool.test-pool.connection-validation-method=custom-validation 管理集resources.jdbc-connection-pool.test-pool.validation-classname= org.glassfish.api.jdbc.validation.DerbyConnectionValidation和管理集resources.jdbc-connection-pool.test-pool.is-connection-validation-required=true

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41040060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档