Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从睡眠中恢复应用程序会导致“通信链路故障”_Mysql_Timeout_Connection Pooling_Cloudbees - Fatal编程技术网

Mysql 从睡眠中恢复应用程序会导致“通信链路故障”

Mysql 从睡眠中恢复应用程序会导致“通信链路故障”,mysql,timeout,connection-pooling,cloudbees,Mysql,Timeout,Connection Pooling,Cloudbees,我有一个好主意Run@cloud实例已配置,运行正常,但在一段时间不活动后,它将被取消激活,然后连接池似乎未正确刷新 当我返回站点时,前几个请求会超时,原因是: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 4,746,680 milliseconds ag

我有一个好主意Run@cloud实例已配置,运行正常,但在一段时间不活动后,它将被取消激活,然后连接池似乎未正确刷新

当我返回站点时,前几个请求会超时,原因是:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 4,746,680 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.
    sun.reflect.GeneratedConstructorAccessor86.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
    com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3092)
    com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2978)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3526)
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
    com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
    com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5022)
    org.apache.tomcat.dbcp.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:371)
    org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:328)
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:87)
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
我使用cloudbees-web.xml文件中配置的数据源通过JNDI进行连接,如下所示:

    <resource name="jdbc/myapp" auth="Container" type="javax.sql.DataSource">
        <param name="username" value="myuser" />
        <param name="password" value="mypass" />
        <param name="url" value="jdbc:cloudbees://myurl />
    </resource>
是否缺少某些配置,或者这是服务器中连接池配置的错误?

[来自CloudBees Wiki上的]

MySQL包含一个超时,该超时将关闭长时间处于空闲状态的连接。为了提高数据库性能,CloudBees数据源使用ApacheDBCP连接池在应用程序关闭JDBC连接后重用它们

如果您使用的连接在池中空闲时间过长,则应用程序可能会遇到以下错误:从服务器成功接收的最后一个数据包是XXX秒前的数据包

连接池包括一个设置,该设置将在调用javax.sql.DataSource.getConnection时验证并抛出死连接。要使用此设置,请将以下XML参数添加到cloudbees-web.XML中的数据源定义中

<param name="validationQuery" value="SELECT 1" />
<param name="testOnBorrow" value="true" />
[来自CloudBees Wiki上的]

MySQL包含一个超时,该超时将关闭长时间处于空闲状态的连接。为了提高数据库性能,CloudBees数据源使用ApacheDBCP连接池在应用程序关闭JDBC连接后重用它们

如果您使用的连接在池中空闲时间过长,则应用程序可能会遇到以下错误:从服务器成功接收的最后一个数据包是XXX秒前的数据包

连接池包括一个设置,该设置将在调用javax.sql.DataSource.getConnection时验证并抛出死连接。要使用此设置,请将以下XML参数添加到cloudbees-web.XML中的数据源定义中

<param name="validationQuery" value="SELECT 1" />
<param name="testOnBorrow" value="true" />

请注意,testOnBorrow将导致每次从池中抓取连接时都执行SELECT 1,例如,实际上对于每个执行的查询。对于DBCP池来说,使用minEvictableIdleTimeMillis、TimeBetweenvictionRunsMillis和NumtestsPerviction在特定超时后逐出连接可能是一个更好的主意。或者,您可以尝试testWhileIdle而不是testOnBorrow。请注意,testOnBorrow将导致每次从池中抓取连接时都执行SELECT 1,例如,实际上每次执行的查询都会执行SELECT 1。对于DBCP池来说,使用minEvictableIdleTimeMillis、TimeBetweenvictionRunsMillis和NumtestsPerviction在特定超时后逐出连接可能是一个更好的主意。或者,您可以尝试testWhileIdle而不是testOnBorrow。
bees app:bind -a APP_ID -db DB_NAME -as JNDI_ALIAS validationQuery="SELECT 1" testOnBorrow=true