Home > Database > Mysql Tutorial > MySQL Connector/Net 句柄泄露

MySQL Connector/Net 句柄泄露

WBOY
Release: 2016-06-07 17:36:47
Original
1123 people have browsed it

MySQL5.5的环境,使用的Connector/Net版本是6.8.3.0,发现在打开连接异常时会有内存与句柄泄露,写了一个小程序测试一下:privatevoidHandleLeak(){DbConnection

MySQL 5.5的环境,使用的Connector/Net版本是6.8.3.0,发现在打开连接异常时会有内存与句柄泄露,写了一个小程序测试一下:


private void HandleLeak() { DbConnection conn = null; while(true) { try { //服务器能连上,但给的密码是错误的,Open时会引发Exception conn = new MySqlConnection("Server=localhost;Database=test;Uid=用户名;Pwd=错误的密码"); conn.Open(); } catch { //清理 conn.Close(); conn.Dispose(); conn = null; Console.WriteLine("Connect Error"); } finally { Thread.Sleep(1000); } } }


在任务管理器里观察句柄数一直在增长,但同样的代码,如果换成是SqlServer就没有问题。用ProcessXp看了一下,进程占用了大量的TCP连接没有关闭,处于CLOSE_WAIT状态,说明和server之间的连接没有正常关闭,此时用 netstat -ano | findstr "3306" 看一下,,能看到mysqld.exe(PID: 1900)有大量处于FIN_WAIT_2状态的连接。

wKioL1MDH1Hx_vOKAAM3kSsHq_s251.jpg


从状态上看,貌似是登录失败后server端主动断开连接,但client端没有正确关闭tcp连接导致的,具体要看一下Connector的源码,但现在手里没有,等有时间再说吧。有高手知道这个问题的麻烦给留个言。


另外试了一下,如果执行GC.Collect(),句柄就不会泄露了。



本文出自 “兔子窝” 博客,请务必保留此出处

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template