数据库连接问题 - 应用程序无法恢复

时间:2018-02-09 13:54:41

标签: postgresql java-ee jboss7.x

我在JBoss AS 7.2上运行的Java EE Web App连接到Postgresql 9.4数据库(托管在RDS上)。

应用程序非常庞大,并且混合了网页服务,API调用和计划任务

我越来越频繁地重新启动应用程序服务器,因为整个应用程序已停止运行,检查数据库统计数据我可以看到连接数已与数据库CPU一起经历了

enter image description here

(应用程序停止响应时出现大幅飙升,我重新启动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,连接数恢复正常。

我的数据库数据源配置如下所示..

<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以阻止崩溃应用程序的连接数增加?

2 个答案:

答案 0 :(得分:0)

您可以通过使用此参数<max-pool-size>

声明要允许的最大池大小来限制最大连接数

您必须考虑您的申请并选择适当的尺寸来设置<max-pool-size>

答案 1 :(得分:0)

因为您需要使用验证检查器机制以及DaveB在数据源配置中已经提到的参数,在doc中给出。