我有一臺「Cron服務」,我在生產服務器上運行了一年半以上。嘗試連接時MySQL.Data:「對象引用未設置爲對象的實例」
這是一個常規的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)與「使用」聲明中這樣的功能,所以連接是正在關閉,這個不應該是一個連接被打開並耗盡的問題(儘管它可能,如果MySQL庫內有bug的話)。
這是我使用該服務的連接字符串:
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
雖然該錯誤信息是很清楚,就像我之前提到的,我們發佈的所有連接,所以這不應該發生。有任何想法嗎?
你檢查了事件查看器嗎? – CheeseConQueso 2009-11-24 21:47:54
是的。除了我自己的應用程序發佈的錯誤報告(詳細信息是我上面發佈的內容)和「應用程序」日誌中的條目之外,沒有任何內容表明我的進程拋出未處理的異常並死亡。 – 2009-11-24 21:56:00
它是100%的時間還是偶爾會死? – 2009-11-25 05:02:42