我有一个“Cron服务”,我已经在我们的生产服务器上运行了一年半。
这是一个常规的Windows服务,每分钟都连接到数据库,检查一个表是否有事情要做,如果是,那么它。这是一个不经常使用的网站的服务器,所以大部分时间服务完全闲置。
几个月前,这项服务开始抛出以下异常而死亡:
MESSAGE: Object reference not set to an instance of an object.
SOURCE: MySql.Data
TARGETSITE: MySql.Data.MySqlClient.Driver CheckoutConnection()
STACKTRACE: at MySql.Data.MySqlClient.MySqlPool.CheckoutConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at DBA.Connect() in D:\xxx\DBA.vb:line 21
at CronService.TaskMailings.OnExecute() in D:\xxx\TaskMailings.vb:line 54
at CronService.CronTask.ThreadExecute() in D:\xxx\CronTask.vb:line 99
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
该例外显然来自MySQL库内部。另外,我调用它的函数非常简单:
Public Shared Function Connect() As MySqlConnection
Dim strConnString As String = WebConfigurationManager.AppSettings("ConnectionString")
Dim DBConn As New MySqlConnection(strConnString)
DBConn.Open()
Return DBConn
End Function
我正在调用DBA.Connect()(CronService.TaskMailings.OnExecute)的函数正在使用“Using”语句,所以连接 关闭,这个不应该成为连接被打开并且用尽的问题(尽管可能,如果MySQL库中存在错误)。
这是我用于服务的连接字符串:
server=localhost;port=13306;uid=xxx;pwd=xxx;database=xxx;Pooling=True;charset=utf8;
任何想法可能会在这里发生什么? 最奇怪的是,在它开始发生之前,它已经工作了一年多,并且对服务器的负载没有足够的变化来证明它是一个负载问题,我相信。
编辑:有些时候它会死掉,它会给出其他错误信息:
MESSAGE: error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
SOURCE: MySql.Data
TARGETSITE: MySql.Data.MySqlClient.Driver GetConnection()
STACKTRACE: at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
atDBA.Connect() in D:\xxx\DBA.vb:line 21
虽然错误信息很清楚,就像我之前提到的那样,我们正在释放所有连接,所以这不应该发生。有什么想法吗?
答案 0 :(得分:2)
我意识到这是一个老问题,但问题在于mysql.data.dll
这是针对哪个版本进行测试的?
我目前在5.2.2.0中看到了这个问题(在5.0.1.0中没有发生这种情况)。
我建议将评分降级到5.0.1.0或升级到最新版本并查看是否仍然发生。