6

play を使用する heroku のアプリがあります。長い間問題なく動作していましたが、最近、次のようになりました。

Caused by: java.sql.SQLException: Timed out waiting for a free available connection.
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) ~[hibernate-core-4.1.9.Final.jar:4.1.9.Final]
at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[bonecp-0.7.1.RELEASE.jar:0.7.1.RELEASE]

によって引き起こされる

org.postgresql.util.PSQLException: FATAL: too many connections for role "ejmatdbwywaugk"

JPA.em() を使用していることを除けば、これは明らかに接続リークです。Play の例では、このようにして取得したエンティティ マネージャーを閉じません。閉じようとしましたが、エンティティ マネージャーが閉じていると言ってアプリが爆発します。

何か案は?

4

4 に答える 4

8

BoneCP 0.8.0-rc1 で試して、次の構成を使用します。

db.default.idleMaxAge=10 minutes
db.default.idleConnectionTestPeriod=30 seconds
db.default.connectionTimeout=20 second
db.default.connectionTestStatement="SELECT 1"
db.default.maxConnectionAge=30 minutes
于 2013-03-19T13:09:40.043 に答える
0

BoneCP のバージョン 0.7.1 (現在は安定版リリース) には接続リークに関する既知の問題があります -バグ 999114。@MaFo で言及されているように、新しいバージョンに切り替えると修正されるはずです。BoneCP/Postgres 接続リークに記載されている回避策もあります

最後に、私が取り組んでいたプロジェクトの別の接続プールTomcat JDBC接続プールに切り替えました.apacheプロジェクトの一部としてより適切にサポートされることを願っています.

于 2013-03-21T09:18:40.807 に答える
-1

リモートのpostgresインスタンスを使用しても同じ問題が発生しました。application.confdbセットアップに以下を追加しました。

db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5

それは私にとってトリックでした。org.postgresql.Driverドライバーを使用しています。

于 2013-03-20T04:50:27.413 に答える