进程突然崩溃,没有任何错误

| 我有一个用.net-3.5编写的较大的服务器进程,也就是说,该进程运行在不断崩溃的VMWare vCenter Server中,没有报告任何错误。该过程由32位Windows Server 2003上的Windows服务创建,旨在长期运行(多天)。这是一个协作过程,它通过Tcp套接字接受来自其他Windows XP计算机上运行的多个客户端的连接,并允许它们共享数据。此外,该过程还自托管约8个WCF服务,这些服务公开了Tcp和Http混合端点。该进程通常始终消耗约500 Mb的内存,并且始终占用30-50%的CPU。在同一虚拟机上还有一个SQL Server 2005实例,该实例承载6个数据库,并消耗大约1-1.2 Gb的内存。整个系统已分配了8 Gb的内存,在正常运行期间消耗的内存高达7 Gb。我假设已启用PAE,以允许系统寻址8 Gb的RAM,但尚未确认这一点。 问题是,在看似随机的时间,该过程将突然崩溃,并且没有报告任何错误,包括事件日志中的错误。我已尝试将调试器附加到该进程,但它们也未捕获崩溃。我首先在带有加载符号的发行版本上尝试了WinDbg,然后用调试版本替换了所有发行版dll / exe,并加载了它们的符号。崩溃仍然发生,并且调试器没有捕获它们。接下来,我在带有.Net Reflector加载项的系统上安装了Visual Studio,并将其附加。它也没有抓住崩溃。 在向我讲解为什么我们要在单个VM上运行这么多东西之前,请知道我没有设计系统,也没有以这种方式实现它。我们的客户出于特定原因要求它,因此我被要求进来并使其工作。如果您可以找到有助于解释突然崩溃的具体证据,我只会对环境提出批评。如果我们可以提供此类证据,则我们的客户可能愿意改变环境。也将不胜感激任何允许我捕获有关崩溃的更多信息的调试技术。     
已邀请:
http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx     
没有输出的\“ crash \”表示调用
_exit()
(甚至
exit()
)。我已经看到Visual Studio运行时库的一些角落可以做到这一点,尽管它们通常会向get2ѭ发送一条神秘的消息。
stderr
被捕获了吗? 内存不足的怀疑似乎也有可能。如果.net具有类似于
heapspace()
的函数来描述堆正在使用多少内存,请定期记录该日志,并记录使用的总内存(代码+堆栈+数据)。我对.net不熟悉,但是必须有一些函数来获取这些值。     
事实证明,其中一个服务插件正在寻找并引用Java库。当用户注销时,由于JVM终止,插件使服务崩溃。通过遵循本文中的建议(使用\'-Xrs \'参数启动JVM),我们能够使一切再次正常运行: http://www.velocityreviews.com/forums/t128371-java-app-dies-on-logoff.html     

要回复问题请先登录注册