我目前正在运行一些java代码,它会对mysql数据库进行大量调用。这些调用充斥着数据库,在代码运行几个小时后,我得到一个嵌套异常:
java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2380)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:798)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3700)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1203)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2572)
Last packet sent to the server was 8789 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2592)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:798)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3700)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1203)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2572)
不幸的是,我对这类问题没有太多经验,有人可以推荐一些方法来确保我的所有查询都能得到处理吗?
我可以理解这是一个非常广泛的问题,但查询本身并不困难,更多的是我要求的查询数量。
由于
答案 0 :(得分:1)
我会在OS / MySql / Web服务器级别对此进行故障排除。换句话说,这本身并不是“Java”问题。它可能更像是“系统性能/系统配置”问题。
建议:
1)您尚未指定您的操作系统,Web服务器/应用程序服务器。这些是关键。
2)运行基本性能检查(适用于Linux的ps -eaf和iostat,适用于Windows的任务管理器/ CPU /内存/网络统计信息)。特别注意“netstat”(Linux和Windows)。
3)查看所有相关日志(Linux的/ var / log / messages等; Windows的EventVwr等)
4)检查您的操作系统,数据库和Web服务器配置设置。
5)特别注意可能的“陈旧连接”和与DB相关的“连接池”参数。
检查以下链接:
Communications link failure due to: java.io.EOFException < =设置Tomcat“autoReconnect = true”...如果你甚至正在运行 Tomcat!
http://sacharya.com/grails-dbcp-stale-connections/ < =调整连接池参数
http://communications-link-failure.blogspot.com/ < =减少mysql wait_timeout