我有三台运行 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 调用绝不是问题。
那么,当我有足够的端口时,我怎么能用完端口呢?