我有一个Windows服务,做一些深入细致的工作每隔一分钟(实际上它是每个在它通过HTTP同步到不同的系统时间开始一个新的线程)。 问题是, 几天后突然停止,不任何错误消息。
我有NLOG到位,我已经注册了“AppDomain.CurrentDomain.UnhandledException”。 在文本文件,日志中的最后一项仅仅是没有任何问题的正常入境。 看在事件日志,我也找不到应用程序日志中的任何消息,但是,也有在系统日志中的两个项目。
一个基本上说,该服务已意外终止。 而已。 第二个事件(同时作为第一个)说:“......堆栈一个新的保护页无法创建......”
从我读过的东西,这可能是一个堆栈溢出异常。 我没有任何解析XML和我不这样做递归工作。 我用门,南希和SignalR举办一个网络服务器和具有RavenDB嵌入模式下运行。 每分钟一个新的任务是使用Taskfactory从.NET 4.0开始,我也有一个ContinueWith,我重新开始System.Timers.Timer到在一分钟内再次触发。
我怎样才能开始调查这个问题? 有什么能为这种错误的可能原因?
根据您所提供的信息,我至少,至少,请执行以下操作:
- 要格外注意给任何第三方调用,并添加额外的信息围绕这些点登录。
- 有一些在何种情况下
AppDomain.CurrentDomain.UnhandledException
不会帮助你-一个StackOverflowException
是其中之一。 我相信CLR将只是简单地给你在这种情况下,而不是堆栈跟踪的字符串。 - 支付约在引入多个线程方面格外注意。
一个经常被忽视的一个例子StackOverflowException
是:
private string myString;
public string MyString { get { return MyString; } } //should be myString
正如“什么是值得” - 报告这个错误时,该代码试图写入Windows事件日志和交互式用户没有足够的权限在我的情况。 这是一个小控制台应用程序,登录异常到一个文本文件和事件日志(如果需要)。 在例外,文本文件被更新,但然后抛出这个错误,而不是由错误处理捕获。 禁用事件日志记录停止错误发生。
万一任何其他人有同样的问题,在我的情况,我发现我的窗口服务被困在一个无限递归循环意外。 因此,如果任何人有这个问题,采取可能造成巨大的递归循环的考虑方法调用。
我得到这个特定的计算机上,并追踪到C#对象从初始化中引用本身