The last packet sent successfully to the server was 0 milliseconds ago.[nutch---mysql ]


今天在使用JDBC操作mysql時遇到下面的異常信息: 

引用
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
at com.tomymap.galaxy.virgo.util.DbService.getConnection(DbService.java:66) 
at com.tomymap.galaxy.virgo.util.DbService.getConnection(DbService.java:46) 
at com.tomymap.galaxy.virgo.dao.PNNDao.getConnection(PNNDao.java:51) 
at com.tomymap.galaxy.virgo.dao.DaoBase.executeUpdate(DaoBase.java:69) 
at com.tomymap.galaxy.virgo.dao.PNNDao.updatePNNRelation(PNNDao.java:161) 
at com.tomymap.galaxy.virgo.pnn.PyramidNeuralNetwork.buildPNNRelations(PyramidNeuralNetwork.java:400)
at com.tomymap.galaxy.virgo.pnn.PyramidNeuralNetwork.incrementalGenPNN(PyramidNeuralNetwork.java:144)
at com.tomymap.galaxy.virgo.pnn.PyramidNeuralNetwork.main(PyramidNeuralNetwork.java:410)


着實讓人崩潰的信息,花費了一天的時間來解決。 
不羅嗦,直接描述解決辦法。 

Java代碼   收藏代碼
  1. 配置:  
  2. ubuntu10.10  
  3. 5.1.49-1ubuntu8.1  
  4. mysql-connector-java-5.1.18.jar  



交互: 
300k records 
300k * 10 = 3M次訪問mysql 
處理時間0.5h以內 

解決方法: 
(1)使用JDBC URL中使用autoReconnect屬性,url添加

Java代碼   收藏代碼
  1. &autoReconnect=true&failOverReadOnly=false&maxReconnects=10  


(2) 修改MySQL的參數. /etc/my.cnf 添加 

Sql代碼   收藏代碼
  1. [mysqld]  
  2. wait_timeout=31536000  
  3. interactive_timeout=31536000  


(3)重啟mysql 

Java代碼   收藏代碼
  1. service mysql restart  



原因分析: 
(1)大量數據訪問情況下,mysql connection連接有可能失效 
(2)長時間不妨問,connection會失效 

更多參考: 
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#dynamic-system-variables 
http://www.blogjava.net/heweiya/archive/2006/01/18/28483.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM