各位好,我是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后,进行测试,没有问题出现。会不会是另一个环境的网络问题??急呀~~~
谢谢大家!!

解决方案 »

  1.   

    看看3308端口是不是也被占用?或者说它用的还是3306端口netstat -ano |findstr 3308  (3306)
    tasklist | findstr <pid>
      

  2.   

    大概原因是短时间内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了。 
      

  3.   

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