.Net 4.0 Windows 应用程序在 Windows Server 2008 下的 clr.dll 中崩溃

Posted

技术标签:

【中文标题】.Net 4.0 Windows 应用程序在 Windows Server 2008 下的 clr.dll 中崩溃【英文标题】:.Net 4.0 Windows Application crashes in clr.dll under Windows Server 2008 【发布时间】:2011-07-08 10:58:08 【问题描述】:

我有一个计划每天运行的 Windows 应用程序,并且根据 EventViewer 中的以下日志间歇性地失败。

Faulting application name: MyApplication.exe, version: 1.0.0.0, time stamp: 0x4d54829a
Faulting module name: clr.dll, version: 4.0.30319.1, time stamp: 0x4ba21eeb
Exception code: 0xc0000005
Fault offset: 0x00000000000029e1
Faulting process id: 0xbb1c
Faulting application start time: 0x01cbd99223d8b4eb
Faulting application path: E:\MyApplication\MyApplication.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Report Id: 7e74ec7e-45a5-11e0-a95d-003048de380d

在第二个 EventViewer 日志中显示:

The process was terminated due to an internal error in the .NET Runtime at IP 000007FEF97329E1 (000007FEF9730000) with exit code 80131506.

服务器是 Win Server 2008 R2,应用程序使用 .Net 4.0(您也可以在错误日志中看到)。

应用程序密集使用多线程,从远程数据库读取并写入本地硬盘。

对导致此问题的原因有任何猜测以及有关如何调查的任何建议?我不知道它在大约 5-10 小时的应用程序生命周期中哪里失败了。

【问题讨论】:

“致命的执行引擎错误”,垃圾收集堆已损坏。祝你好运。 联系 Microsoft 支持并为他们提供您的进程的故障转储... 您使用 COM 组件或其他任何您应该告诉我们的东西?您是否四处搜索过您消息中的各种代码,看看是否有其他人已经发布过类似的内容? 【参考方案1】:

我也有同样的问题。在大约 8-10 小时的应用寿命中,CLR 错误会上升。我怀疑我的非托管代码在后台线程中生成异常。但是我无法真正找出原因。但是,您可以尝试以下方法:

如果您使用非托管代码审查异常处理语句 在执行它时。 确保您拥有 .NET4 的最新修复程序。 (https://connect.microsoft.com/VisualStudio/Downloads)

如果您已经找到解决方案,请告诉我。

【讨论】:

感谢您发布此信息。实际上,不是为了解决这个问题,而是为了提高应用程序的性能,我们用一个非常快的硬盘替换了硬盘,所有这些奇怪的东西都消失了,应用程序现在运行得如此之快,没有任何问题。以前应用程序会使用过多的资源(主要是内存),因为它一次只允许一个线程写入磁盘,所有数据都会累积在内存中;这可能是导致此问题的原因。 Windows 操作系统在妥善处理此类棘手案件方面并不出名,不是吗? ;)【参考方案2】:

我有类似的问题,所以这可以帮助未来的用户找到解决方案:

我们使用 Apache log4net 来记录应用程序日志。

更新到 DLL 版本 1.2.15 后,对于 dotnet Framwork 4.5,一旦日志文件达到最大大小 (10MB),它就会开始触发这个确切的异常

【讨论】:

【参考方案3】:

热修复大部分都消失了,我遇到了类似的问题,所以我会在这里分享我的答案。

我的解决方案围绕着我将 Lamda 传递给 P/Invoke 的事实:

https://***.com/a/52360307/4700841

【讨论】:

以上是关于.Net 4.0 Windows 应用程序在 Windows Server 2008 下的 clr.dll 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章

.Net 4.0 Windows 应用程序在 Windows Server 2008 下的 clr.dll 中崩溃

Xml 通过 IPC for .net (4.0) 传输到 windows 上的 Mono

如何在 IIS 7、Windows 7 上将 ASP.NET 4.0 添加为应用程序池

Windows 10 中的 CoCreateInstance 错误 0x80131700:无法使用 .NET 运行时 4.0

使用 .NET 4.0 还是 .NET 3.5?

.NET Framework (v 4.0) COM 注册免费从 Win32 C++ 应用程序调用