Windows服务/无法创建堆栈的新保护页面

Dan*_*ang 13 c# stack-overflow debugging clr windows-services

我有一个Windows服务,每隔一分钟做一些密集的工作(实际上它每次启动一个新的线程,它通过http同步到不同的系统).问题是,几天后突然停止,没有错误信息.

我有NLog,我已注册'AppDomain.CurrentDomain.UnhandledException'.textfile-log中的最后一个条目只是一个正常的条目,没有任何问题.查看EventLog,我也无法在应用程序日志中找到任何消息,但是,系统日志中有两个条目.

一个人基本上说服务意外终止了.而已.第二个事件(与第一个事件同时)说:"......无法创建堆栈的新保护页面......"

从我读过的内容来看,这可能是堆栈溢出异常.我没有解析任何XML而且我不做递归工作.我使用Gate,Nancy和SignalR托管一个Web服务器,并使RavenDB以嵌入模式运行.每分钟都使用.NET 4.0中的Taskfactory启动一个新任务,我还有一个ContinueWith,我重新启动System.Timers.Timer,在一分钟内再次启动.

我该如何开始调查此问题?可能出现这种错误的原因是什么?

Bry*_*sby 15

根据您提供的信息,我至少应该至少执行以下操作:

  1. 特别注意任何第三方电话,并在这些点附近添加额外的信息记录.
  2. 在某些情况下,AppDomain.CurrentDomain.UnhandledException无法帮助您 - StackOverflowException成为其中之一.我相信CLR只会在这种情况下给你一个字符串而不是堆栈跟踪.
  3. 在引入多个线程的区域周围要特别注意.

一个经常被忽视的例子StackOverflowException是:

private string myString;
public string MyString { get { return MyString; } }  //should be myString
Run Code Online (Sandbox Code Playgroud)