2013-03-18 35 views
6

Tôi có một ứng dụng trên heroku sử dụng phát. Nó đã làm việc tốt cho thời gian dài nhất, nhưng hơi Gần đây tôi bắt đầu nhận được này:Vấn đề kết nối Heroku/Play/BoneCp

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] 

mà là do

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

Bây giờ điều này là khá rõ ràng là một sự rò rỉ kết nối, ngoại trừ việc tôi đang sử dụng JPA.em(). Các ví dụ Play không bao giờ đóng trình quản lý thực thể có được như thế này. Tôi đã thử đóng nó, nhưng sau đó các ứng dụng thổi lên nói rằng người quản lý thực thể được đóng lại.

Bất kỳ ý tưởng nào?

Trả lời

8

Hãy thử với BoneCP 0.8.0-rc1 và sử dụng cấu hình này:

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 
+0

Cố gắng này ngay bây giờ, bây giờ sẽ ở một hoặc hai ngày nếu nó hoạt động. –

+0

Điều này đã diễn ra trong hai ngày mà không có sự cố. Tôi tin rằng đó thực sự là vấn đề với phiên bản 0.7.1 của BoneCp. Để tham khảo sau này, đây là những gì bạn nên có trong tệp Build.scala của bạn trong appDependencies: "com.jolbox"% "bonecp"% "0.8.0-rc1" –

+2

Tôi không biết liệu có phải là vấn đề hay không của BoneCP nhưng tôi thấy những vấn đề bắt đầu sau khoảng 40 giây kết nối nhàn rỗi ... nếu bạn đặt idleConnectionTestPeriod đến 40 giây, tôi nghĩ rằng vấn đề trở lại. – MaFo

0

tôi đã cùng một vấn đề bằng cách sử dụng postgres dụ từ xa. Tôi đã thêm phần sau vào thiết lập db application.conf của mình:

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

Điều đó đã làm cho tôi. Tôi đang sử dụng trình điều khiển org.postgresql.Driver.

0

Đã xảy ra sự cố đã biết với rò rỉ kết nối cho phiên bản 0.7.1 của BoneCP (hiện là bản phát hành ổn định) - Bug 999114. Chuyển sang phiên bản mới hơn như được đề cập bởi @MaFo nên khắc phục. Ngoài ra còn có một cách giải quyết khác được đề cập trong số BoneCP/Postgres connections leak

Cuối cùng, tôi đã chuyển sang một hồ bơi kết nối khác như tôi mong muốn (sẽ được) hỗ trợ tốt hơn vì nó là một phần của dự án apache.

2

Có lỗi trong giao dịch BoneCP/Heroku/Play với các kết nối. Tôi đã thực hiện một sửa chữa để BoneCP trên github dưới:

https://github.com/wwadge/bonecp/pull/10

Ngoài ra, thư viện biên soạn có sẵn bằng cách thêm dòng sau vào Build.scala:

val appDependencies = Seq(
"com.jolbox" % "bonecp" % "0.8.0-rc2-SNAPSHOT-20130712-14382677.jar", 
.... 

val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
    libraryDependencies += "com.jolbox" % "bonecp" % "0.8.0-rc2-SNAPSHOT-20130712-14382677.jar" from "https://dl.dropboxusercontent.com/u/36714110/libraries/bonecp-patches/bonecp-0.8.0-rc2-SNAPSHOT-20130712-14382677.jar" 
,resolvers += ... 
Các vấn đề liên quan