2014-11-05 98 views
4

在我的webapp上,我經常會得到以下異常: java.sql.SQLNonTransientConnectionException:無法發送查詢:最後一個數據包未完成 它通常會在很長一段時間後發生系統空閒。 重啓tomcat可以暫時解決問題。MariaDB空閒一段時間後無法工作

我最近在我的生產服務器上運行了RHEL7(運行tomcat7和mariaDB 5.5)。 舊的服務器上沒有發生這個錯誤(使用mySQL運行RHEL5)。 我更新了從舊服務器上使用的mysql驅動程序到最新的穩定mariadb連接器的java數據庫驅動程序: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

+0

聽起來像是你連接池不發送次數不夠保活消息 – Ordous 2014-11-05 12:34:17

+0

你是怎麼解決這個問題的?當我們遷移到DPCP時,我們遇到了完全相同的問題。 – proulxs 2015-04-02 12:35:22

+0

我不記得確切。我提出了服務器上的超時或將客戶端上的超時時間設置爲比服務器上的超時時間短。目前thr java應用程序中的超時值爲18000. – Slava 2015-04-04 08:52:33

回答

1

我們沒有足夠的信息,但我曾與MySQL服務器的類似問題。該問題後更改超時設置解決了my.cnf

wait_timeout  = 28800   
interactive_timeout = 28800 

28800 secons - 8小時

重新啓動服務器以應用更改