博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL Connector/Net 句柄泄露
阅读量:5986 次
发布时间:2019-06-20

本文共 916 字,大约阅读时间需要 3 分钟。

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状态的连接。

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

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

转载地址:http://cdulx.baihongyu.com/

你可能感兴趣的文章
Keepalived+lvs 集群的 部署(二)
查看>>
Windows桌面文字透明
查看>>
C# DLL资源文件打包(图片、JS、CSS)[WebResource]
查看>>
outlook 一般性错误,http.......找不到应用程序
查看>>
ADRMS 服务连接点(SCP)无法注册
查看>>
ISA2006标准版的常规安装
查看>>
脚本入门之算术运算
查看>>
第三章 Spring的心脏
查看>>
TCP/IP的比喻
查看>>
ORACLE 配置event参数
查看>>
Vmware下安装配置HMC
查看>>
oracle11g数据库升级
查看>>
nodeJS搭建本地服务器
查看>>
UIActivityIndicatorView使用
查看>>
别让设备管理器泄露你的秘密
查看>>
线程本地存储区:线程相关的静态字段和数据槽
查看>>
IDisposeable接口理解
查看>>
broadcom OF-DPA
查看>>
plsql导入excel时报错:ORA-01036: 非法变量名/编号
查看>>
linux 安装jdk
查看>>