6

私はhirbernateを使用して重いロードされたJavaアプリケーションを持っています。そして、私は接続プールDBCPとして使用していましたが、接続のロスに問題がありました。私はc3p0に切り替えました。しかし、今は時々スレッドをbloksと私はなぜか知りません。ここのように:データベース接続プーリング・ライブラリの最良の選択肢は何ですか? (c3p0の問題)

"[email protected]" prio=10 tid=0x00007fa6b0940000 nid=0x4e12 runnable [0x00007fa6f8f1c000] 
    java.lang.Thread.State: RUNNABLE 
    at com.mchange.v2.resourcepool.BasicResourcePool.doCheckinManaged(BasicResourcePool.java:1258) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkinResource(BasicResourcePool.java:647) 
    - locked <0x00007fa7286d9728> (a com.mchange.v2.resourcepool.BasicResourcePool) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.doCheckinResource(C3P0PooledConnectionPool.java:636) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.connectionClosed(C3P0PooledConnectionPool.java:630) 
    at com.mchange.v2.c3p0.util.ConnectionEventSupport.fireConnectionClosed(ConnectionEventSupport.java:55) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.fireConnectionClosed(NewPooledConnection.java:510) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:381) 
    at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1246) 
    - locked <0x00007fa794ccf020> (a com.mchange.v2.c3p0.impl.NewProxyConnection) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:96) 
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474) 
    at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:408) 
    at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:347) 
    at org.hibernate.impl.SessionImpl.close(SessionImpl.java:325) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession(SessionFactoryUtils.java:791) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:777) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.releaseSession(SessionFactoryUtils.java:755) 

「 私のスタックトレースダンプはしばらくの間サーバがcompletlyブロックされたでので、このスレッドは、ロック< 0x00007fa7286d9728>で、すべての私の他のスレッドをブロックしていることを示しました。あるスレッドが他のスレッドを長時間ブロックしていた場合や、このスレッドの時間が極端に長くても、結果が、私のシステムが完全にブロックされ、極端に遅くなった場合、このスレッドの実行時間はわかりません。私はたくさんのグーグルで探せましたが、この問題の解決方法はわかりません。私は接続を閉じてできるだけ早くトレッドを終了するためにプールが必要です。他の接続プールを使用する必要がありますか?私にとっては、このプールライブラリは他のライブラリより少し遅くても100%節約、デッドロック、ライフロック、starvationsは絶対に必要です。あなたは何を意味するか任意のヘルプ

+0

申し訳ありませんが古いスレッドをバンプアップしていますが、しばらく前に私はそのテーマについていくつかの小さな研究を行いました:http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

答えて

1

1)のための

おかげでDBCPに負け接続について言いますか? MySQLを使用していますか?私は、何の活動もしばらくしていなければ、MySQLを使って作業することで接続が失われるという問題を知っています。あなたの場合ですか?

2)高負荷アプリケーションでのHibernateの使用はあまり良い選択ではありません。 Hibernateは、複雑なデータやリレーションシップ(特に、データを取得したいだけの場合でも、すべてのセッションでトランザクションが必要な場合など)では、バルクすぎて遅くなります。3)理由が多すぎると、プールにスレッドが足りません。 ?

高負荷プロジェクトに参加しました。私たちはソフトデータ(非常に複雑なマッピングをしていない複数のレコードで構成されたリクエストがたくさんあります)と、重いデータの場合はJDBC上の自己記述ラッパーを使用しています。また、DBCPには何の問題もありませんでした。ただし、長い非アクティブ時間の後にMySQLデータベースへの接続が失われることはありませんでした。

3

BoneCP - http://jolbox.comをご覧ください。

C3P0/DBCPよりもはるかに優れたパフォーマンスと、これまでのデッドロックの報告はありません。

+0

BoneCPはもはや多くの開発を受けていないし、それ以上の接続を作成する際に問題が発生しています。開発者が作業を再開したため、C3P0に戻ることを考えています。 – leebutts

+0

BoneCPの開発が再開されました。 – wwadge

+0

私たちはTomcatプールの使用を開始しましたが、これまでのところ良い仕事をしているようです。 – leebutts