我有一个运行在PostgreSQLAS7.2上的Java EE Web App,它连接到一个JBoss 9.4数据库(托管在RDS上)。
该应用程序相当大,可以完成网页服务、API调用和计划任务的混合工作
随着整个应用程序陷入停顿,我不得不越来越频繁地重新启动应用程序服务器,检查数据库统计数据,我可以看到连接数与数据库CPU一起达到了顶峰

(当应用程序停止响应时出现大峰值,一旦我重启Jboss,它就会回落)
数据库日志显示与客户端的连接已丢失:
LOG: could not send data to client: Broken pipe
FATAL: connection to client lost当事务超时时,jboss日志开始填满...
Caused by: javax.transaction.RollbackException: ARJUNA016063: The transaction is not active!修复的唯一方法是重新启动JBoss,连接数会恢复正常。
我的DB数据源配置如下所示。
<datasource jta="false" jndi-name="java:/appWebDatasource" pool-name="jdbc/appWebDatasource" enabled="true" use-java-context="true" use-ccm="false">
<connection-url>jdbc:postgresql://${web.db.url}/MyApp</connection-url>
<driver>postgresql</driver>
<security>
<user-name>jboss</user-name>
<password>******</password>
</security>
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>问题一出现,我就检查了pg_stat_activity表,发现没有idle in transaction连接,它们要么空闲,要么处于活动状态
所以我的问题是,如何配置JBoss或Postgresql,以阻止应用程序崩溃的连接数量的增加?
发布于 2018-02-09 22:03:03
通过使用此参数<max-pool-size>声明要允许的最大池大小,可以对最大连接数设置上限
您必须考虑您的应用程序并选择要在<max-pool-size>中设置的适当大小
发布于 2018-02-14 01:07:48
因为您还需要使用验证检查器机制以及doc中给出的数据源配置中DaveB已经提到的参数。
https://stackoverflow.com/questions/48707483
复制相似问题