org.postgresql.util.PSQLException:此连接已关闭。长时间运行的事务的错误

时间:2018-03-28 21:22:58

标签: postgresql jdbc pgbouncer jdbc-pool

我们正在" org.postgresql.util.PSQLException:此连接已关闭。"在我们的一个部署中,仅用于长时间运行的事务(超过几分钟):

Caused by: org.hibernate.TransactionException: rollback failed
        at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:217)
        at org.springframework.orm.hibernate4.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:604)
        ... 87 more
Caused by: org.hibernate.TransactionException: unable to rollback against JDBC connection
        at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167)
        at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:211)
        ... 88 more
Caused by: org.postgresql.util.PSQLException: This connection has been closed.
        at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:822)
        at org.postgresql.jdbc2.AbstractJdbc2Connection.rollback(AbstractJdbc2Connection.java:839)
        at org.apache.commons.dbcp2.DelegatingConnection.rollback(DelegatingConnection.java:492)
        at org.apache.commons.dbcp2.DelegatingConnection.rollback(DelegatingConnection.java:492)
        at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163)
        ... 89 more

我们的堆栈如下:

  • Postgresql 9.2(在db服务器Ubuntu 16.03上)
  • PgBouncer(在应用程序服务器Ubuntu 16.03上)
  • Jars(在应用服务器Ubuntu 16.03上)
    • org.postgresql:在PostgreSQL:9.2-1004-jdbc41
    • javax.transaction的:JTA:1.1
    • org.apache.commons:公地POOL2:2.4.2
    • org.apache.commons:公地dbcp2:2.1.1'

Postgresql和Pgbouncer使用默认参数,我们对dbcp使用以下参数:

database-initial-size = 2
database-max-total = 200
database-validation-query = SELECT 1
database-test-on-borrow = true
database-test-while-idle = true
database-max-wait-millis = 3000
database-time-between-eviction-runs-millis = 34000
database-min-evictable-idle-time-millis = 55000

我们有其他具有相同参数的部署,但我们没有遇到同样的问题。

我怀疑有一个防火墙/ Nat会在超时后重置连接,但我不知道如何检查是否是这种情况。如果您可以指导我检查哪些日志/参数/配置可能导致此异常,我将非常感激。

我测试过,如果Postgresql和PgBouncer在同一台服务器上,则不会出现此问题。 我还调查了Postgresql日志,没有记录任何错误消息。

0 个答案:

没有答案