
公司服务器最近几天一直报错误,大概运行一天就报如下异常。
java.net.SocketException: Nobufferspaceavailable (maximum connections reached?): JVM_Bind
搞的很是郁闷,转载篇文章,貌似很全面,试试看。
一个朋友让我帮忙解决他服务器上一个JAVA应用出现的问题,我利用业务时间赶赴现场两次,终于解决了这个疑难杂症,赶紧记录下来,不求能解救曾经和我一样困惑的劳苦大众,但愿自己别忘了。
一、问题的表现
首先说明一下环境,服务器是WINDOWSSERVER 2003,我对这个操作系统的特性不是很熟悉,只是当做普通的操作系统来使用。我平时一般JAVA服务器都是安装LINUX。
使用的SQL SERVER 2005,SP2。java下载安装他的本来是SQL SERVER 2000的,是我上周帮他做的迁移。
中间件使用RESIN 2.1.17,这是我非常喜欢和熟悉的SERVLET容器,加不加装APACHE都具有很好的WEB能。
杀毒软件使用的瑞星,双网卡,硬件防火墙,什么牌子我没管。
那到底是什么问题?
这个!
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP连接失败。 java.net.SocketException: Nobufferspaceavailable (maximum connections reached?): JVM_Bind
RESIN启动后,在短时间内正常,但是在没有访问的情况下,会在几个小时后,自己死掉。静态页面没有问题,也就是基于HTTPWEB服务器没有死,涉及连接的,都不行。

二、分析
我是第一次碰到这个错误,赶紧GOOGLE。
我首先自己排除了是程序的问题,网上有人说,是连接没有关闭,这样的同志都是新手,而且我自己也可以肯定,程序是肯定没有问题的,这个错误,出现的位置绝对比连接要底层的多。
网上的文章非常少,都看了一遍,总结一共有以下几个原因。
1.Windows服务器运行自动更新。具体为什么自动更新运行后,就会消耗系统这么多的SOCKET连接,我还搞不清楚。但是有一点,自动更新肯定会占用网络带宽和CPU,在服务器上,我觉得应该是关闭自动更新的,采用人工更新的方法。
2.机器中了木马。木马会打开很多后门,创建大量的连接,包括局域网肉鸡上的,还有外网的。这也会导致机器出现无法上网,或者程序无法连接。在搜索到的结果中,大量的结果都是采用的SQLSERVER服务器,这是很容易招来木马和病毒的服务器,大部分是SQLSERVER出问题,不是偶然的。java下载安装
3.虚拟内存配置过低。第一次发现这个问题后,我到现场打开机器,确实报了一个虚拟内存的错误,说虚拟内容不足。
4.有不当程序创建了大量的短连接,由于程序的不健壮,导致SOCKET处于忙碌或者TIME_WAIT状态,或者服务器和客户端有一方出现异常,而另一方没有得到通知,还在连接,持续不断的做写操作。
三、动手解决
经过分析,将准备采取的措施一一写下来,我的脑袋不太好用,容易忘记东西。
措施如下,先做什么,后做什么,看到这篇文章的朋友,可以自己调整。
1. 优化RESIN的配置,适当的扩大连接池的数量,虽然不是这个问题,还是稍微扩大一点。配置了,关闭了默认没有做的目录浏览,屏蔽了404等错误;使用HTTPD -INSTALL将RESIN安装入服务,原来我的朋友是直接启动的控制台,这容易导致程序在控制台缓存到顶后停止。关闭了HIBERNATE的SHOW_SQL开关。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-76699-1.html
厂家找了这么多水军发帖
听着歌
卿言是也