JDBC错误:08S01有时会发生 [英] JDBC ERROR:08S01 sometimes happens

查看:5310
本文介绍了JDBC错误:08S01有时会发生的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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.

推荐答案

您很有可能是

  1. 打开套接字而不关闭它们.随着时间的流逝,打开的套接字数量变得太大,并且应用程序崩溃.
  2. 您同时打开了太多插座.也许是因为您有很多线程.

我猜这是第一名.仔细检查代码,并确保关闭所有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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆