java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):JVM_Bind

时间:2012-04-10 11:58:58

标签: windows tomcat jvm socketexception connection-leaks

Tomcat正在Windows下运行一个webapp。几天之后(在非常低的负载下),标题中提到的异常开始出现在日志中,从那时起就不能建立新的连接,唯一的解决办法就是重启服务器。

环境:

  • 最新的Tomcat 6
  • Windows Server 2008 R2
  • JDK 6 update 30
  • SQL Server 2008
  • Kerberos身份验证

到目前为止收集的证据:

  • netstat显示没有过多的连接数
  • ProcessExplorer显示没有过多的打开文件句柄
  • 系统主内存使用率是平均值
  • JVM堆使用率是平均值
  • 重启Tomcat无法解决问题

打开问题:

  • 如果我们泄漏连接,它们不应该出现在netstat中吗?
  • 不应该重启appserver解决问题,因为操作系统应该释放所有进程资源吗?
  • 有没有办法将问题追溯到它的起源?例如。安装监控软件,可能类似于lsof等?

我没有想法,任何提示赞赏!

3 个答案:

答案 0 :(得分:56)

我们收到此错误的原因是Windows Server 2008 R2 / Windows 7中的错误。由于具有多个核心的计算机上的竞争条件,内核泄漏了环回套接字,此修补程序修复了此问题: http://support.microsoft.com/kb/2577795

答案 1 :(得分:11)

我在Windows 7 64位上运行Alfresco Community 4.0d并且出现了相同的症状和错误。

微软补丁解决了这个问题:“运行Windows Server 2008 R2或Windows 7的多处理器计算机上的内核套接字泄漏”(http://support.microsoft.com/kb/2577795)(即Buddy Casino的答案) (见下文))。

我想补充的另一个观察是,在Alfresco服务关闭后,Windows连接(Internet Explorer,远程桌面等)将在5-10分钟后再次运行。

Alfresco是一款出色的产品,我担心我不得不废弃它。幸运的是stackoverflow来救援!

再次感谢Buddy Casino的回答。

嘘声对投票问题进行投票的人。

答案 2 :(得分:1)

我们在类似的设置上看到了相同的东西,W2008R2,Tomcat 6.0.29,Java 1.6.0.25。重启tomcat没有用,但重启服务器本身至少会有一段时间。在我们最后一次关闭各个服务之后,我们相信我们已将其缩小到同时运行在服务器上的Alfresco实例或Backup Exec代理服务。在那些服务(总共四个)停止之后,Tomcat中的应用程序再次开始工作,尽管我们仍然看到stdout日志中的缓冲区/连接错误很奇怪。在确认哪个是罪魁祸首之前需要等待问题返回,这可能是几天到一周或更长时间。

您是否有机会在服务器上运行Alfresco或BE?