3

昨夜、Play が突然データベースに接続できなくなりました (同じ EC2 インスタンス上の PostGreSQL)。

23:57:31.996 [BoneCP プール ウォッチ スレッド] エラー com.jolbox.bonecp.hooks.AbstractConnectionHook {1}

-接続の取得に失敗しました。5000 ミリ秒スリープしてから再試行します。残りの試行: 10。例外: null

スローされるエラーが異なる場合があります。

01:21:05.920 [BoneCP-pool-watch-thread] ERROR com.jolbox.bonecp.PoolWatchThread {1} - 接続の取得中にエラーが発生しました。5000msでリトライ

org.postgresql.util.PSQLException: FATAL: 残りの接続スロットは非レプリケーション スーパーユーザー接続用に予約されています

5 秒ごとに再試行しましたが、成功しませんでした。Playを再起動したところ、うまく再接続されました。

これは今週2回発生します。

自動再起動を考えました。そのためのツールを知っていますか?または他のアイデア?

編集 Build.scala の依存関係を更新して BoneCP を更新しました。

  "com.google.guava" % "guava" % "14.0-rc1",
  "org.slf4j" % "slf4j-api" % "1.7.5",
  "com.jolbox" % "bonecp" % "0.8.0-rc1",  
  "org.reflections" % "reflections" % "0.9.8"

しかし、今では、接続を閉じることができないというこのエラーが定期的に発生します。そのため、再び接続の最大数に達します。

-接続 org.postgresql.util.PSQLException を閉じているときにエラーが発生しました: トランザクションの途中でトランザクションの読み取り専用プロパティを変更することはできません。org.postgresql.jdbc2.AbstractJdbc2Connection.setReadOnly(AbstractJdbc2Connection.java:617) で ~[postgresql.postgresql-9.1-901-1.jdbc4.jar:na]

4

1 に答える 1

1

このエラーは、開いている接続が多すぎることを示しています。これは、接続プールの問題、またはアプリケーションでの接続リークが原因である可能性があります。トラブルシューティングするには:

  1. pg_stat_activity ビューをチェックして、接続がどこから来ているかを確認します。彼らはあなたのアプリですか?何処か別の場所?

  2. それらがアプリからのものである場合は、これらがいつ起動するかに細心の注意を払ってください。プーラーが接続を再利用できるように、接続を適切に解放していませんか?

于 2013-11-15T08:03:37.937 に答える