问题描述
我连接mysql数据库,占用3306端口程序和数据库都在本地,一次连接本地的一个端口就占用一个3306,当连接关闭以后这个端口为time_wait状态,在这个状态下4分钟之内没有新的连接才释放这个端口,但我的程序是死循环读写数据库的,所以几个小时以后可能会占满6万多个端口随后就会出现数据库连接出错的情况。端口占用的太多这种情况应该怎么处理。在数据库连接中的代码我都是正常关闭并销毁了连接对象。有没有知道的麻烦告诉小弟一下
解决方案
解决方案二:
把你的connection,写成单例,或者静态
解决方案三:
拜托,3306是数据库侦听的端口,跟你客户端占用的端口根本不是同一个端口你并不是"占用一个3306",而是占用一个未被占用的端口如果数据库连接正常释放的话,这个端口应该也会随即释放,不会一直占用的.到底端口是否被占用,可以写个socket通信程序测试,看端口是否被占用.不要盲目怀疑
解决方案四:
.Net中的连接用完dispose后,只是将其放回连接池,除非这时候已经开启了很多的物理连接(socket)才会马上释放死循环读可以考虑优化,将某些连接合并到次连接中完成,比如同一个conn和cmd,查完后,重新设置sql和params又或者用存储过程同时加大默认的PoolSize
解决方案五:
另外,即使是死循环读,你也应该加个sleep每秒访问好几百次是没有任何意义的
解决方案六:
应该不会这样子吧,是不是没有及时释放连接呢
解决方案七:
是你没有释放资源吧,链接完了之后都要释放一下资源
解决方案八:
单例、sqlconnection字段保留、下次查询数据库就用这个保留的字段、不要新建数据库的连接了、很浪费资源的
解决方案九:
3306端口只会占用一次,客户端连接的端口是占用的其他可用端口连接到3306端口瞬间占用6万多端口的话,肯定会出错的,端口数量加上保留的所有端口最大数是65536你死循环的查询数据库为什么把实例化的连接放到循环里啊?绝对不能那么做,这样必定造成连接数过多。一定要只实例化一个链接对象,就是就做一次连接,只循环查询就可以了。楼主这可是非常严重的逻辑错误啊