ALE*_*sos 106 .net runtime-error executionengineexception
我们有一个针对.NET 4.0编写的应用程序,它在周末崩溃,将以下消息放入事件日志中:
应用程序:PnrRetrieverService.exe Framework版本:v4.0.30319
描述:由于.NET运行时在IP 791F9AAA(79140000)处出现内部错误而导致进程终止,退出代码为80131506.
这是在Windows Server 2003 R2标准版框中.谷歌搜索这个错误没有发现任何相关的.例如,这不是在VS Studio中发生的,而是在生产框中发生; 当服务最终重新启动时,它没有遇到任何进一步的问题.
如何诊断.NET运行时中的错误?
Han*_*ant 117
退出代码为80131506
这是一个讨厌的,ExecutionEngineException.从.NET 4.0开始,此异常会立即终止该程序.通用原因是垃圾收集堆的状态损坏.这反过来总是由非托管代码引起的.引发此异常的代码中的确切位置没有帮助,损坏通常在检测到损坏之前发生.
找到确切的原因将是困难的.查看您的服务可能正在使用的任何非托管代码.如果没有明显的候选人,那些行为不端的恶意软件扫描程序是臭名昭着的,那就是怀疑环境问题.如果它重复得非常差,那么就会出现软RAM错误等可疑硬件问题.
thi*_*ing 39
在x64 .Net 4上并发执行垃圾收集的错误可能导致如下面的Microsoft KB条目中所述:
垃圾收集期间发生ExecutionEngineException
您应首先进行深入的minidump探索,以确保在垃圾收集期间出现问题.
通常可以在崩溃条目后的事件日志中的Windows错误报告条目中找到minidump位置.然后,享受WinDbg的乐趣吧!
<gcConcurrent/>
可以在此处找到有关使用配置元素的最新文档,以禁用并发或(在.NET 4及更高版本中)后台垃圾回收.
jas*_*son 10
我在.NET运行时经历过"内部错误",结果是由我的代码中的错误引起的; 不要以为仅仅因为它是.NET运行时中的"内部错误"而导致代码中没有错误作为根本原因.在责怪别人之前,总是总是责怪你自己的代码.
希望您有日志记录和异常/堆栈跟踪信息,以指示您从哪里开始查找,或者您可以在崩溃之前重复系统状态.
对于那些从谷歌来到这里的人,我最终遇到了这个问题,这个具体的答案解决了我的问题.我通过support.microsoft.com上的实时聊天联系了Microsoft获取此修补程序,他们通过电子邮件向我发送了一个指向此修补程序的链接.
经过多年在许多应用程序中解决这个问题后,微软似乎终于接受了它作为 .NET 4 CLR 中导致这种情况发生的错误。http://support.microsoft.com/kb/2640103。
我以前一直通过强制垃圾收集器在服务器模式下运行来“修复”它(app.config 中的 gcServer enabled="true"),如 Think Before Coding 链接的 Microsoft 文章中所述。这实质上强制应用程序中的所有线程在收集期间暂停,从而消除了其他线程访问由 GC 操作的内存的可能性。我很高兴地发现,我多年来徒劳地在我的代码或其他 3rd 方非托管库中搜索“错误”只是徒劳无功,因为错误存在于 Microsoft 的代码中,而不是我的代码中。
使用我的 .NET 4 代码的最新版本在 WinXP 框上有相同的确切错误。检查以前的版本 - 现在它们也崩溃了!好的,所以不是我:)。这里/上面没有任何建议有帮助。
最近 (2018-05-09) 报告了同样的问题:退出代码为 80131506 的应用程序崩溃。
答:我们收到了类似的错误,但我们相信我们的错误是由 Citrix 内存优化器引起的。
解决方案是强制在发生问题的主机上重新生成 .Net 核心库:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update /force
根本原因仍然未知(机器没有更新并且几乎没有用),但这对我来说做到了!