MySQL/Hibernate随机出现"通信链路故障"

ben*_*rre 5 java mysql hibernate c3p0

我们有一个运行Hibernate/C3PO 4.1.4.Final,Jetty,Java 6和Mysql 5.1.63的webapp.

javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:通信链接失败

从服务器成功接收的最后一个数据包是238,519毫秒.成功发送到服务器的最后一个数据包是0毫秒前.

我们的persistence.xml的属性部分看起来像这样......

  <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>
Run Code Online (Sandbox Code Playgroud)

我们在MySQL上的超时设置为600秒.我们不知道这是怎么发生的1/5次.服务器负载很小,数据库相对较小,servlet都在几秒钟内运行.

有人有什么想法吗?

vik*_*kas 0

我们在生产服务器上也遇到了同样的问题。默认情况下,MySQL 每 8 小时重置一次连接,因此我们几乎每 8 小时就会遇到通信故障,因为我们通过计划的作业连续访问数据库。我们通过将“wait_timeout”增加到 14 天来解决这个问题,并且由于我们的维护计划每 15 天进行一次,因此我们重新启动了数据库集群中的每个 MySQL 服务器(我们有主主复制)。通过该方法,此后我们没有遇到任何通信链路故障。事实上,有时我们每隔 15 天就不会重新启动服务器,但仍然没有错误(摸木头)。:) 根据您的描述,您似乎已将 wait_timeout 设置为 10 分钟,所以我猜您会收到大约 10 分钟时差的错误。请注意,没有必要在 wait_timeout 之后重置每个 MySQL 连接时都出现此错误。仅当您当时访问数据库时它才会存在。:)