JDBC错误:08S01有时会发生 [英] JDBC ERROR:08S01 sometimes happens
问题描述
SQLState relac:08S01,线程:0
SQLState relac: 08S01, thread:0
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
成功发送到服务器的最后一个数据包是0毫秒前.驱动程序尚未收到来自服务器的任何数据包. ...更多
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. ... more
由以下原因引起:java.net.SocketException:没有可用的缓冲区空间(已达到最大连接数?):connect 在java.net.PlainSocketImpl.socketConnect(本地方法) 在java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 在java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 在java.net.Socket.connect(Socket.java:529) 在java.net.Socket.connect(Socket.java:478) 在java.net.Socket.(Socket.java:375) 在java.net.Socket.(Socket.java:218) 在com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) 在com.mysql.jdbc.MysqlIO.(MysqlIO.java:294) ...另外20个
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.(Socket.java:375) at java.net.Socket.(Socket.java:218) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:294) ... 20 more
我使用N个线程,有时只是在特定时间(X分钟)内发生
I working with N threads and it happens just sometimes not in a specific time( X minutes)
我尝试使用不同的驱动程序,但无法解决问题.
I try with diferent driver but i can't solve the problem.
推荐答案
您很有可能是
- 打开套接字而不关闭它们.随着时间的流逝,打开的套接字数量变得太大,并且应用程序崩溃.
- 您同时打开了太多插座.也许是因为您有很多线程.
我猜这是第一名.仔细检查代码,并确保关闭所有Connection对象和ResultSet对象.
I'm going to guess it's #1. Double check your code and make sure that you close all your Connection objects and ResultSet objects.
如果您遇到了#2的问题,则可能需要考虑使用更少的线程(在某个点之后线程过多会弊大于利)或使用类似
If you're running into #2 then you may want to consider using fewer threads (after a certain point having too many threads does more harm than good) or using a connection pool like c3p0 which will only create a set number of connections and allow your threads to share them. Using c3p0 is a good idea in general and should also allow you to detect #1 faster.
第三个选择是使用更高级别的抽象,例如JPA或JDO,它们将为您管理连接管理.
A third option is to use a higher level abstraction such as JPA or JDO which will take care of connection management for you.
这篇关于JDBC错误:08S01有时会发生的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!