Oracle客戶端bug導致“嘗試讀取或寫入受保護的記憶體。這通常指示其他記憶體已損壞。”
阿新 • • 發佈:2021-01-07
近期有生產專案反饋頻繁出現iis crash,但是Windows日誌未記錄crash相關的詳細資訊。因此藉助procdump工具抓取crash時刻dump,再進行分析。
(1)procdump抓取crash dump
D:\Tools\Procdump>procdump -ma -n 3 -e w3wp.exe
(2)Debug
通過windbg debug異常資訊,出現System.Reflection.TargetInvocationException,並提示Use !PrintException 000000fc5b27e6e0 to see more.
按照提示命令繼續檢視,詳細異常資訊,最終發現出現 System.AccessViolationException異常,且提示資訊為“嘗試讀取或寫入受保護的記憶體。這通常指示其他記憶體已損壞。”
進一步查看出現異常的堆疊資訊,拋異常的方法為Oracle.DataAccess.Client.OpsSql.Prepare2(),可能與ODP驅動有關。
進一步檢查問題環境oracleClient版本,為11.2.0.1,建議專案升級OracleClient11.2.0.4版本後問題解決。