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

36

我有一个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小时。


2
"致命的执行引擎错误",垃圾回收堆被损坏。祝好运。 - Hans Passant
2
联系微软支持并提供你的进程崩溃转储。 - Johannes Rudolph
你是否使用了COM组件或其他什么需要告诉我们的东西?你是否在周围搜索过各种代码,看看是否有其他人已经发布了类似的内容? - Ruben Bartelink
3个回答

1

我也遇到了同样的问题。在应用程序运行8-10小时后,CLR错误会增加。我怀疑我的非托管代码在后台线程中生成异常。但是我真的找不出原因。您可以尝试以下方法:

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


谢谢您发布这篇文章。实际上,我们不是特意解决这个问题,而只是为了提高应用程序的性能,我们将硬盘替换为一个非常快的硬盘,所有这些奇怪的事情都消失了,应用程序现在运行得非常快,没有问题。以前,应用程序会使用太多资源(主要是内存),因为它只允许一个线程一次写入磁盘,并且所有数据都会积累在内存中,这可能是这个问题的原因。Windows 操作系统在处理这样棘手的情况时并不出名,不是吗?;) - Rez.Net

1
热修补程序已经大部分消失,我遇到了类似的问题,所以我会在这里分享我的答案。
我的解决方案围绕着一个事实展开,即我正在将Lambda传递给P/Invoke:

https://dev59.com/lq7la4cB1Zd3GeqPc296#52360307


1
我遇到了类似的问题,所以这可以帮助未来的用户找到解决方案:
我们使用Apache log4net记录应用程序日志。
在更新到DLL版本1.2.15之后,对于dotnet Framwork 4.5,一旦日志文件达到最大大小(10MB),它就开始触发这个确切的异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接