2012-06-22 19 views
5

Hibernate/C3PO 4.1.4.Final、Jetty、Java 6、およびMysql 5.1.63を実行するWebアプリケーションがあります。MySQL/Hibernateにランダムに "通信リンクの失敗"があります

javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException:通信リンク 失敗

成功し、サーバから受信した最後のパケットが238519 ミリ秒前のことでした。サーバーに最後に送信されたパケットは、0ミリ秒前に でした。

当社のpersistence.xmlのプロパティセクションでは、MySQL上

<properties> 
     <property name="hibernate.show_sql" value="false"/> 
     <!--Begin Credentials --> 
     <property name="hibernate.connection.url" 
        value="${rp.config.db.url}&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> 
     <property name="hibernate.connection.username" value="${rp.config.db.user}"/> 
     <property name="hibernate.connection.password" value="${rp.config.db.password}"/> 
     <!--End Credentials --> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
     <property name="hibernate.dialect" value="com.printlogix.rp.server.utils.Mysql5BitBooleanDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="validate"/> 
     <!--C3PO --> 
     <property name="hibernate.connection.provider_class" 
        value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider"/> 
     <property name="hibernate.c3p0.acquire_increment" value="25"/> 
     <property name="hibernate.c3p0.idle_test_period" value="60"/> 
     <property name="hibernate.c3p0.timeout" value="120"/> 
     <property name="hibernate.c3p0.max_size" value="150"/> 
     <property name="hibernate.c3p0.min_size" value="25"/> 
     <property name="hibernate.c3p0.max_statement" value="0"/> 
     <property name="hibernate.c3p0.preferredTestQuery" value="select 1;"/> 

    </properties> 

当社のタイムアウトは600秒に設定されている...このようになります。これが1/5回起こっているかどうかはわかりません。サーバーの負荷は非常に小さく、データベースは比較的小さく、サーブレットはすべて数秒で実行されます。

誰もが考えている?

+0

JettyとMySQLをホストするコンピュータ間の通信に問題はありますか?ファイアウォールのいくつかの種類? –

+0

このようなケースを引き起こすためにあなたがやっている取引は何ですか?彼らはどれくらい持続するのですか?それらがMySQLのタイムアウトより長く続く場合は、トランザクションを複数のバッチトランザクションに分割してみてください。ソース:そこにいて、それをしてください(それは私が記述したものです:)) –

+0

まず第一にあなたのMySQLは操作可能ですか?このパラメータは正しいurl -rp.config.db.urlを指していますか? – Chan

答えて

0

また、運用サーバーでも同じ問題が発生しました。デフォルトでは、MySQLは接続を8時間ごとにリセットするため、スケジュールされたジョブでデータベースに継続的にアクセスしていたため、ほぼ8時間ごとに通信障害が発生していました。私たちは 'wait_timeout'を14日に増やして解決し、15日ごとにメンテナンスが予定されているので、各MySQLサーバを再起動するのはDBクラスタです(Master-Masterレプリケーションがあります)。アプローチでは、その後、通信リンクの障害は発生していません。実際には、15日ごとにサーバーを再起動しないでくださいが、エラーはありません(タッチ・ウッド)。 :) あなたの説明によると、wait_timeoutを10分に設定しているようですので、約10分の時間差でエラーが発生すると思います。 wait_timeoutの後にリセットされたすべてのMySQL接続でこのエラーが発生する必要はありません。その時点でデータベースにアクセスしている場合にのみ存在します。 :)

0

私はthis postが役に立ったと思います。そのような場合は、wait_timeoutの値を大きくすると、問題を解決するのではなく、より多くの時間だけ延期されます。

問題はこれに関連することができます

  • あなたはHibernateセッション
  • を開くには、あなたがこの休止状態を使用しようとするデータベースのwait_timeout
  • の値よりも時間がかかるいくつかのことを行いますセッション。あなたがここでコメントしたメッセージは、表示されます

興味があれば私はhereのケースを文書化しました。

関連する問題