首页 文章

JDBC ERROR:08S01有时会发生

提问于
浏览
1

SQLState relac:08S01,thread:0 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障成功发送到服务器的最后一个数据包是0毫秒前 . 驱动程序未收到来自服务器的任何数据包 . ...更多引起:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):在java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:)的java.net.PlainSocketImpl.socketConnect(Native Method)连接351)java.net的java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)中的java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)中的java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) . 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)at com.mysql.jdbc.MysqlIO . (MysqlIO.java:294)... 20更多

我使用N个线程,它有时不会在特定时间内发生(X分钟)

我尝试使用不同的驱动程序,但我无法解决问题 .

2 回答

  • 2

    你最有可能

    • 打开套接字而不关闭它们 . 随着时间的推移,打开的套接字数量会变得太大而应用程序崩溃 .

    • 你同时打开太多套接字 . 也许是因为你有很多线程 .

    我猜它是#1 . 仔细检查您的代码并确保关闭所有Connection对象和ResultSet对象 .

    如果您遇到#2,那么您可能需要考虑使用更少的线程(在某个点有太多线程之后弊大于利)或使用像c3p0这样的连接池,它只会创建一定数量的连接并允许你的线程分享他们 . 一般来说,使用c3p0是个好主意,也应该让你更快地检测#1 .

    第三种选择是使用更高级别的抽象,例如JPA或JDO,它将为您负责连接管理 .

  • 0

    在我的例子中,我们使用基于JbossSeam框架的JBoss服务器上的MsSQL服务器和应用程序 . 此错误是由于hibernate和hsqldb的版本不匹配造成的 . 尝试更新两个库的最新版本和错误将消失 . 例如在maven下面,hibernate 4.3.6.Final与hsqldb 2.2.9完全兼容 . 这种方式帮助了我们

相关问题