[.NET]Internal error in the .NET Runtime (80131506)

Event ID: 1023(.NET Runtime Error)

Event ID: 1000(Application Error)

程式已經停止運作

 

昨天客戶諮詢一個日常作業Batch console出現程式已經停止運作的錯誤,一開始的訊息不太充足,後來再請客戶提供Windows Event log後有點眉目: 

如果沒有伺服器管理/電腦管理的權限(compmgmt),可以用以下方式開啟eventlog: 

1.按一下開始,輸入eventvwr.msc執行事件檢視器:

2.然後檢查windows紀錄下的應用程式及系統是否有等級為錯誤的訊息。

(環境資訊: Windows Server 2008 R2 + .NET Framework 4.0)


錯誤訊息

Event log

果不其所然,在程式發生問題當時,在應用程式分類下,windows event log也紀錄下兩個錯誤log:

等級 來源 事件識別碼
錯誤 Application Error 1000
錯誤 .NET Runtime 1023

 

透過event id查kb,發現可能和GC回收有關

https://support.microsoft.com/en-us/kb/2640103

 

.NET Runtime中的錯誤訊息內容: 

The process was terminated due to an internal error in the .NET Runtime at IP 6B484BC2 (6B300000) with exit code 80131506.

 


問題原因

發生原因: (KB中的說明)

The issue occurs because an object that is being referenced is dereferenced by the garbage collector in common language runtime 4 (CLR4).

Therefore, an access violation occurs during garbage collection or when the application tries to access the released object.

簡單的說,就是本來把從資料庫中的資料集合放到物件中,接著想要參考時卻發生物件已經被GC掉了,有可能的原因是執行當時的記憶體不足而觸發GC

(前面這句是自己OS,後續再請sp幫忙給記憶體使用追蹤來調查)。

 

小結:

  • 先請客戶apply這隻hotfix到testing,觀察正常後上線。(上線5年後,第一次遇到)
  • 如果Os環境是.NET 4.5,如果apply hotfix後沒效果,可能要先移除.NET4.5再apply KB,最後安裝回.NET 4.5。
  • KB2640103

 

參考:

https://support.microsoft.com/en-us/kb/2640103

.NET 4.5: internal error in the .NET Runtime (80131506) / disabling concurrent GC