“.NET运行时内部错误”导致应用程序崩溃

我们有一个针对.NET 4.0编写的应用程序,周末崩溃,将以下消息放入事件日志中:

应用程序:PnrRetrieverService.exe框架版本:v4.0.30319
说明:由于.NET运行时中的IP 791F9AAA(79140000)的退出代码为80131506的内部错误,进程已终止。

这是在Windows Server 2003 R2标准版盒子上。 谷歌搜索这个错误没有发现任何相关。 例如,这不是在VS Studio中发生的,而是在生产箱中发生的; 当服务最终重新启动时,它没有遇到更多问题。

如何诊断.NET运行时错误?


退出代码80131506

这是一个令人讨厌的问题,ExecutionEngineException。 从.NET 4.0开始,此异常立即终止程序。 通用原因是垃圾收集堆状态的腐败。 而这又总是由非托管代码引起的。 代码中发生此异常的确切位置无助,通常在检测到损坏之前发生损坏。

找到确切的原因将是困难的。 查看您的服务可能使用的任何非托管代码。 如果没有明显的候选人,可能会怀疑环境问题,恶意软件扫描仪行为异常臭名昭着。 如果重复性很差,那么怀疑软RAM问题等硬件问题。


垃圾收集在x64 .Net 4上的并发实现中的错误可能会导致此问题,如以下Microsoft知识库条目中所述:

垃圾回收期间发生ExecutionEngineException

您应该首先进行深入的小型转储探索,以确保垃圾收集期间发生问题。

通常可以在崩溃条目之后的事件日志中的Windows错误报告条目中找到小型转储位置。 然后,与WinDbg玩得开心!

有关使用<gcConcurrent/>配置元素禁用并发或(在.NET 4及更高版本中)后台垃圾回收的最新文档可以在这里找到。


我在.NET运行时遇到过“内部错误”,这些错误原来是由我的代码中的错误引起的; 不要以为这是.NET运行库中的“内部错误”,因为它的根本原因没有代码中的错误。 在责怪别人之前,总是总是责怪自己的代码。

希望您拥有日志记录和异常/堆栈跟踪信息,以指示您从哪里开始寻找,或者您可以在崩溃之前重复系统状态。

链接地址: http://www.djcxy.com/p/29043.html

上一篇: Application Crashes With "Internal Error In The .NET Runtime"

下一篇: What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config?