当前位置: 首页 > 面试题库 >

搜索java.net.SocketException:没有可用的缓冲区空间

淳于祺
2023-03-14
问题内容

嗨,我有一个非常难看的问题:java.net.SocketException:没有可用的缓冲区空间(已达到最大连接?)这是客户端服务器应用程序。客户端是Windows
XP SP2 32b,具有两个网卡核心对。Java
1.6。u7。应用程序打开了几个用于本地通信的服务器套接字,以及几个用于rmi到jboss服务器的客户端套接字。

几个小时/天后!我无法打开任何新的客户端套接字来与服务器进行通信。服务器套接字仍然有效。

Windows netstat显示从130到150的连接。当手动尝试时,我在约3500个连接后耗尽了缓冲区!

我试过了:

  • 检查我们使用的每个套接字,然后将其关闭。
  • 在后台运行netstat监视打开的连接
  • 运行病毒扫描以找到任何恶意软件
  • 将Java更新为1.6 u16
  • 禁用第二个网络接口

Java重新启动后,就可以打开新的连接了。

整体例外:

原因:javax.naming.CommunicationException:无法连接到服务器IP:1099 [根异常是javax.naming.ServiceUnavailableException:无法连接到服务器IP:1099 [Roo
t异常是java.net.SocketException:没有可用的缓冲区空间(已达到最大连接数?):JVM_Bind]]
2009-08-03 09:13:18,968调试[线程9]-堆栈跟踪:
2009-08-03 09:13:18,968调试[线程9]-org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562)
2009-08-03 09:13:18,968调试[线程9]-org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
2009-08-03 09:13:18,968调试[线程9]-org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
2009-08-03 09:13:18,968调试[线程9]-javax.naming.InitialContext.lookup(未知源)

--edited
我们终于解决了snmp服务器故障的问题。 我在注释下面写了我的笔记。感谢帮助。


问题答案:

我们尝试(并成功)解决了问题。JAVA-再次检查我们使用的每个套接字,如果需要的话,将它们注册在一个特殊的类中
-为每个打开套接字本身的类提供SocketFactory和ServerSocketFactory(例如jboss连接器)
-检查打开的文件,最后
将其关闭-URL也打开连接但是如果您之后请求流,则连接将与流一起关闭(感谢Stephen)。

操作系统
-使用不同的Java(1.5、1.6、1.7)
-安装新的驱动程序
-使用netstat并在后台监视流量(使用脚本,是的,win xp可以很好地执行脚本)。如果需要,请使用高级数据包嗅探器(鲨鱼?)。
-Win XP有并发连接限制,也请检查它们(Google)
-一次又一次检查病毒和恶意软件(甚至在专用网络上!)



 类似资料:
  • 问题内容: 嗨,我正在使用Apache HTTP Client 4.0基于HTTPS协议在服务器上上传一些文件。上载的应用程序每天24x7运行。今天突然间,它开始抛出此异常- 谁能帮帮我吗?我完全不知道发生了什么事? 这是上传文件的源代码- 问题答案: 我的猜测:端口用尽了,这个问题与您的代码不直接相关,而与服务器的当前状态有关。与其他计算机的连接过多,这会导致问题。 要找什么: 服务器的使用率是

  • GSAIOException:错误代码:393238缓冲区溢出,没有可用空间 但我不知道这意味着什么。谁能解释一下是哪种例外。我可以在哪里搜索代码找到问题?

  • 我是协议缓冲区的新手,我想知道是否可以搜索协议缓冲区二进制文件并以结构化格式读取数据。例如,如果我的.proto文件中的一条消息有4个字段,我希望序列化该消息,并将多条消息写入一个文件,然后在该文件中搜索特定的字段。如果我找到该字段,我希望以与写入时相同的结构化格式读回消息。对于协议缓冲区,这是可能的吗?如果可能,任何示例代码或示例都将非常有用。谢谢

  • 问题内容: 我在linux上有一个Java应用程序,它可以打开UDP套接字并等待消息。 在高负载下运行了几个小时之后,有一个数据包丢失,即数据包被内核接收,但不是由我的应用程序接收(我们在嗅探器中看到丢失的数据包,在netstat中看到UDP数据包丢失,我们没有看到这些数据包)在我们的应用日志中)。 我们尝试扩大套接字缓冲区,但这并没有帮助-我们早些时候就开始丢失数据包,仅此而已。 对于调试,我想

  • 我有使用TCP和UDP协议的应用程序。主要假设客户端通过TCP协议连接到服务器端,当连接建立后,发送UDP数据报。我必须支持两种连接到服务器的方案:-客户端在服务器运行时连接-客户端在服务器关闭时连接并重试连接直到服务器重新启动 在下面我附上类的源代码。所有源代码来自放置在官方Netty项目页面中的示例。我唯一误解的是我用非静态变量和函数替换了静态变量和函数。这导致了以后我将需要到多个服务器的许多

  • 我来这里是为了消除专家们对opengl的一些困惑。我感谢你的帮助! 顶点着色器代码看起来像 所以,这是我的理解。GLVertexAttributePointer的目的是定义顶点缓冲区对象中的数据格式。因此,在vbo中,它按如下方式存储数据 所以,我们有两条glVertex AttribPointer线,因为我们在顶点着色器中定义了两个变量。所以基本上我们定义了这两个变量指向什么。因此,第一个glV