日期:2014-05-16  浏览次数:20861 次

Mysql连接问题,求助!!
各位好,我是mysql新手,最近遇到一个问题,实在是解决不了了,在这里求助各位!先谢过了~~
我的开发环境是XP,在XP下装的mysql5.0(使用的端口3306),B/S应用跑在tomcat5.5上,在这个环境下,通过ie进入我的系统,进行频繁的查询,tomcat后台不会报错。但是,在另一个环境下就不行。
另一个环境:操作系统windows2003,装的也是mysql5.0(使用的端口3308,因为那台机器的3306被占用了),B/S应用跑在tomcat5.5上,这个环境下,通过ie进入我的系统,进行频繁的查询操作时,tomcat后台就会报错,错误如下:..address already in use:connect..
会是什么原因造成的呢?之前我怀疑是更改端口引起的,但是我在开发环境下,把mysql的端口换成3308后,进行测试,没有问题出现。会不会是另一个环境的网络问题??急呀~~~
谢谢大家!!

------解决方案--------------------
看看3308端口是不是也被占用?或者说它用的还是3306端口

netstat -ano |findstr 3308 (3306)
tasklist | findstr <pid>
------解决方案--------------------
大概原因是短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间; )

apache httpclient与close_wait



最近做httpclient做转发服务,发现服务器上总是有很多close_wait状态的连接,而且这些连接都不会关闭,最后导致服务器没法建立新的网络连接,从而停止响应。 
后来在网上搜索了一下,发现解决的方法也很简单,如果想重用连接,那就使用连接管理器,从连接管理器里获取连接,然后定时的用连接管理器来释放空闲连接。httpclient自带了SimpleHttpConnectionManager,提供了Java代码 
closeIdleConnections(long idleTimeout) 

closeIdleConnections(long idleTimeout) 这样的方法。 
如果不需要重用链接,则直接在httpmethod创建时,设置一个http头信息就可以了 
Java代码 
httpmethod.setRequestHeader("Connection", "close"); 

httpmethod.setRequestHeader("Connection", "close");
这样就不会有恼人的close_wait了。 


------解决方案--------------------
参考下贴

http://topic.csdn.net/u/20090920/22/14d4f597-b7d4-4c24-b0db-abb2956e66c3.html
[收集]mysql 无法联接故障现象及原因