我有三台运行Windows 2003的服务器,其中包括ColdFusion 9(JRun 4)和ColdFusion 10(Tomcat 7)。
每周有几次服务器在整个地方都出现套接字错误:
javax.mail.MessagingException: Could not connect to SMTP host: 192.168.1.3, port: 25; nested exception is: java.net.SocketException: No buffer space available (maximum connections reached?): connect
和
SQLException while attempting to connect: java.sql.SQLNonTransientConnectionException: [Macromedia][SQLServer JDBC Driver]Error establishing socket to host and port: 192.168.1.11:1433. Reason: No buffer space available (maximum connections reached?): connect.
和
java.io.IOException: Socket read failed at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:323)
当然,我一直在搜索Google和Stack Overflow这个错误,我尝试了很多可能的修复程序。例如MaxPorts注册表值。我遇到的问题是这些服务器不用完了端口。他们有很多。我一直在使用TCPview和netstat(甚至CurrPorts将所有TCP和UDP更改记录到文件中)来分析情况。但每个看起来都很好。在任何时候都不会有超过几百个连接进出。
此外,并非所有来自服务器的传出请求都会引发套接字异常。在这些机器上运行的网站是可以访问的,但有时(似乎是随机的)访问者得到上述套接字错误。
使用RDP连接到这些计算机不是问题,从这些服务器到其他地方执行ping或telnet调用绝不是问题。
那么,当我有足够的端口时,如何耗尽端口?