【问题标题】:Windows service / A new guard page for the stack cannot be createdWindows 服务 / 无法为堆栈创建新的保护页面
【发布时间】:2012-06-28 08:47:25
【问题描述】:

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

我有 NLog 并且我已经注册了AppDomain.CurrentDomain.UnhandledException。文本文件日志中的最后一个条目只是一个正常条目,没有任何问题。查看EventLog,我在应用程序日志中也找不到任何消息,但是,系统日志中有两个条目。

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

根据我的阅读,这可能是堆栈溢出异常。我不解析任何 XML,也不做递归工作。我使用 Gate、Nancy 和 SignalR 托管一个网络服务器,并让 RavenDB 在嵌入式模式下运行。每分钟都会使用 .NET 4.0 中的 Taskfactory 启动一个新任务,并且我还有一个 ContinueWith,我在其中重新启动 System.Timers.Timer 以在一分钟内再次触发。

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

【问题讨论】:

  • 是的,它是一个 SO。它不是托管代码,它以不同的方式报告异常。你有一堆不是你写的代码,都是可疑的。

标签: c# debugging windows-services clr stack-overflow


【解决方案1】:

我认为为什么你们都难过是因为这可能是 SSD 硬件故障。我大约每 3-5 小时玩一次游戏时一直收到此错误,并且我的计算机页面文件以某种方式失败。我知道这不是 RAM,因为我更换了我的 CPU/RAM/MOBO 组合试图解决这个问题。而且它不是编程,因为不同的游戏和不同的应用程序都会同时失败,除非它的窗口损坏?

我可能是错的,但只是一个想法。

我有两个三星 evo 在突袭中

【讨论】:

    【解决方案2】:

    我在一台特定的计算机上得到了这个,并将它追踪到一个从初始化程序中引用自身的 c# 对象

    【讨论】:

      【解决方案3】:

      以防万一其他人遇到同样的问题,就我而言,我发现我的 Windows 服务意外陷入了无限递归循环。所以如果其他人有这个问题,请考虑可能导致巨大递归循环的方法调用。

      【讨论】:

      • 这也是我的情况,消息是由意外递归循环引起的
      【解决方案4】:

      就像“物有所值”一样 - 在我的情况下,当代码尝试写入 Windows 事件日志并且交互式用户没有足够的权限时报告了此错误。这是一个小型控制台应用程序,可将异常记录到文本文件和事件日志(如果需要)。在异常情况下,正在更新文本文件,但随后引发了此错误,并且错误处理未捕获该错误。禁用事件日志记录会阻止错误发生。

      【讨论】:

        【解决方案5】:

        根据您提供的信息,我至少会做到以下几点:

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

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

        private string myString;
        public string MyString { get { return MyString; } }  //should be myString
        

        【讨论】:

        • 感谢您的回答!我会尝试丢弃 Task.New.ContinueWith 的东西,看看是否有什么不同。一个问题 - 它也可能是 System.OutOfMemoryException 吗?
        • @DanielLang:是的,这也是可能的。
        • @BryanCrosby 是否有可能获得 System.OutOfMemoryException 而没有在事件查看器的应用程序部分专门记录它?
        • 肯定是系统内存不足异常。并且不一定是您的应用程序造成的。这可能是相关系统上发生的事情。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 2011-07-30
        • 2022-01-22
        • 2021-09-11
        • 2017-08-28
        • 1970-01-01
        相关资源
        最近更新 更多