【Real World Case】Oracle客户端bug导致“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

近期有生产项目反馈频繁出现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异常,且提示信息为“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

 

 通过_remoteStackTraceString进一步查看出现异常的堆栈信息,抛异常的方法为Oracle.DataAccess.Client.OpsSql.Prepare2(),可能与ODP驱动有关。

 

进一步检查问题环境oracleClient版本,为11.2.0.1,建议项目升级OracleClient11.2.0.4版本后问题解决。

 _remoteStackTraceString说明

 

posted on 2021-01-07 17:31  王.小辉  阅读(379)  评论(0编辑  收藏  举报

导航