java - MariaDB 闲置一段时间后无法工作

标签 java tomcat7 mariadb

在我的 webapp 上,我经常遇到以下异常:
java.sql.SQLNonTransientConnectionException:无法发送查询:最后一个数据包未完成
它通常在系统空闲很长时间后发生。
重启 tomcat 暂时解决了这个问题。

我最近在我的生产服务器上迁移到 RHEL7(运行 tomcat7 和 mariaDB 5.5)。
这个错误在旧服务器上没有发生(使用 mySQL 运行 RHEL5)。
我将 java 数据库驱动程序从旧服务器上使用的 mysql 驱动程序更新到最新的稳定 mariadb 连接器:mariadb-java-client-1.1.7.jar。

任何想法如何解决问题或解决方法?

这是此异常的完整日志:
Lexicon Message: Content.getData Error trying to excute: SELECT * FROM prefixes where prefix ='l' java.sql.SQLNonTransientConnectionException: Could not send query: Last packet not finished at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:136) at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106) at org.mariadb.jdbc.MySQLStatement.executeQueryEpilog(MySQLStatement.java:264) at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:288) at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:338) at snaq.db.CachedStatement.execute(CachedStatement.java:339) at mila.lexicon.dbUtils.Connected.getData(Connected.java:257) at mila.lexicon.dbUtils.Prefixes.get(Prefixes.java:29) at mila.lexicon.analyse.Data.getPrefixes(Data.java:446) at mila.HMM.HMM2Morph.handlePrefixProperNameAnalysis(HMM2Morph.java:1196) at mila.HMM.HMM2Morph.parseXML(HMM2Morph.java:1791) at mila.HMM.HMM2Morph.process(HMM2Morph.java:2337) at org.apache.jsp.processAnalyzerXML_jsp._jspService(processAnalyzerXML_jsp.java:187) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1024) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.mariadb.jdbc.internal.common.QueryException: Could not send query: Last packet not finished at org.mariadb.jdbc.internal.mysql.MySQLProtocol.executeQuery(MySQLProtocol.java:984) at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:281) ... 31 more Caused by: java.io.IOException: Last packet not finished at org.mariadb.jdbc.internal.common.packet.PacketOutputStream.startPacket(PacketOutputStream.java:38) at org.mariadb.jdbc.internal.common.packet.commands.StreamedQueryPacket.send(StreamedQueryPacket.java:76) at org.mariadb.jdbc.internal.mysql.MySQLProtocol.executeQuery(MySQLProtocol.java:982) ... 32 more

最佳答案

我们没有足够的信息,但我在 mysql 服务器上遇到了类似的问题。更改 my.cnf 中的超时设置后问题已解决

wait_timeout        = 28800        
interactive_timeout = 28800

28800 秒 - 8 小时

重新启动服务器以应用更改

关于java - MariaDB 闲置一段时间后无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755943/

相关文章:

mysql - 从 MySQL/MariaDB 表中最近插入的行中选择行

java - Mapreduce 作业到 HBase 抛出 IOException : Pass a Delete or a Put

java - 执行 JFrame.pack() 后如何保存我的 JScrollPane 位置?

java - Context.xml 中的相对路径

spring - 在 tomcat 上运行多个 spring boot web 应用程序

MySQL 查询从涉及 2 列的每个组中获取最后一条记录

java - 如何通过类和方法传递数组和 int ?

java - 使用 tomcat 部署期间避免临时 404 错误

java - 独立的 jdbc-pool 实现内存泄漏

mysql - 主从服务器上的位置未更新