我有一个Windows服务,每隔一分钟做一些密集的工作(实际上它每次启动一个新的线程,它通过http同步到不同的系统)。问题是,在几天之后它突然停止而没有错误消息。
我有NLog,我已注册'AppDomain.CurrentDomain.UnhandledException'。 textfile-log中的最后一个条目只是一个正常的条目,没有任何问题。查看EventLog,我也无法在应用程序日志中找到任何消息,但是,系统日志中有两个条目。
一个人基本上说服务意外终止了。而已。第二个事件(与第一个事件同时)说:“......无法创建堆栈的新保护页面......”
从我读过的内容来看,这可能是堆栈溢出异常。我没有解析任何XML而且我不做递归工作。我使用Gate,Nancy和SignalR托管一个Web服务器,并使RavenDB以嵌入模式运行。每分钟使用.NET 4.0中的Taskfactory启动一个新任务,我还有一个ContinueWith,我重新启动System.Timers.Timer,在一分钟内再次启动。
如何开始调查此问题?可能出现这种错误的原因是什么?
答案 0 :(得分:14)
根据您提供的信息,我至少应该至少执行以下操作:
AppDomain.CurrentDomain.UnhandledException
无法帮助您 - StackOverflowException
就是其中之一。我相信CLR在这种情况下只会给你一个字符串而不是堆栈跟踪。一个经常被忽视的StackOverflowException
的例子是:
private string myString;
public string MyString { get { return MyString; } } //should be myString
答案 1 :(得分:2)
就像它的价值所做的那样' - 在我的情况下,当代码尝试写入Windows事件日志并且交互式用户没有足够的权限时,会报告此错误。这是一个小型控制台应用程序,它记录了文本文件和事件日志的异常(如果需要)。在异常时,文本文件正在更新,但随后抛出此错误并且未被错误处理捕获。禁用事件记录会停止发生错误。
答案 2 :(得分:1)
以防任何其他人遇到同样的问题,在我的情况下,我发现我的Windows服务意外地被困在一个无休止的递归循环中。因此,如果其他人有这个问题,请考虑可能导致巨大递归循环的方法调用。
答案 3 :(得分:1)
我在一台特定的计算机上得到了它,并将其追溯到一个c#对象,该对象在初始化器中引用自身