【问题标题】:Where are the logs and memory dumps of Azure Function crashes?Azure Function 崩溃的日志和内存转储在哪里?
【发布时间】:2021-04-07 07:53:19
【问题描述】:

有时我的 azure 函数会失败,而且我没有记录发生的事情。函数只是停止执行。 我认为有像 StackOverflow 这样的重大错误,但由于没有记录,我无法确定。

我创建了一个简单的天蓝色函数来模拟简单的堆栈溢出:

        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext executionContext)
        {
             RunStackOverflow();
        }
          

        private static void RunStackOverflow()
        {
            RunStackOverflow();
        }

当我使用 http 触发器调用它时,我在浏览器中收到 502 错误,但日志中没有关于此故障的任何内容。截图:https://www.screencast.com/t/ymWoBey4KX

StackOverflow 只是无法捕获并可能导致函数崩溃的异常之一。在本地,当我在模拟器中运行该函数时,我在函数启动的 cmd 窗口中看到堆栈溢出错误。截图:https://www.screencast.com/t/f85U2KmdEBBt

在 Azure 门户中我检查了:

但是在任何地方都没有此崩溃的日志条目。 我联系了 Azure 支持人员,但到目前为止他们的帮助不大。

4 月 12 日更新

使用 KUDU 我可以使用这样的命令创建内存转储 c:\devtools\sysinternals\procdump -e -ma -w 12268

这向我显示了所有线程的所有堆栈跟踪,这是我需要的,但仅在发生第一次机会异常时。

出现这种异常时触发内存转储的命令是: c:\devtools\sysinternals\procdump -accepteula -e -g -ma 8844

但是当我运行它然后触发 StackOverflow 异常时,这里是写到命令行的内容:

[11:37:36] 例外:E0434352.CLR

[11:37:36] 异常:C00000FD.STACK_OVERFLOW

[11:37:37] 进程已退出。

[11:37:37] 未达到转储计数。

很遗憾,没有创建内存转储,所以我看不到导致堆栈溢出的堆栈跟踪。

我也试过了:

c:\devtools\sysinternals\procdump -accepteula -e -g -ma -t 13244

-t 选项在进程退出时触发内存转储。

这实际上记录了函数崩溃时的内存转储。不幸的是,这个转储不包括 StackOverflow 的堆栈跟踪。在线程已经崩溃后,它似乎被转储了。

4 月 21 日更新

有多种方式来托管此处描述的 Azure 函数: https://docs.microsoft.com/en-us/azure/azure-functions/functions-scale

最常见和默认的方式是消费计划。经过一系列的反复试验,我发现可用于检测和分析崩溃的诊断工具 (https://www.screencast.com/t/DyT6Jpuqm2uo) 不适用于消费计划。另一方面,它们可用于应用服务(基本和附加)和其他计划。 Azure 支持人员告诉我,目前没有计划将其添加到消费计划中。

所以现在我创建了一个使用应用服务计划托管的新 Azure 函数,并且我能够使用诊断工具来记录故障转储。解决问题后,我打算回到消费计划,所以这有点小技巧,但它现在确实有效。

【问题讨论】:

  • 你使用 Azure Monitor 吗?通常用作日志聚合器
  • @J.Wincewicz 是的,我使用它。我没有在那里找到有关崩溃的条目。
  • @EricP 目前,这个级别的日志还没有得到很好的支持。您可以通过关注this link 来使用 azure 门户中的 Diagnose and solve problems 选项。但是像Application Crashes 这样的一些功能现在不可用。我只能在Web App Restarted 标签中找到一个常见错误“App Crash”。
  • @IvanYang 谢谢你的回答。不幸的是,在 App Down 和 Reporting Errors 崩溃中没有显示给我。我发现了如何使用 KUDU 进行内存转储,但在发生第一次机会异常时无法触发它。在问题描述中查看我的更新。

标签: azure azure-functions


【解决方案1】:

目前这个级别的日志支持的不是很好。

您可以通过关注 this link 来使用 Azure 门户中的 Diagnose and solve problems 选项,但请注意,此选项中的某些功能(如 Application Crashes)仍在开发中。

步骤:

1.在 azure 门户中 -> 您的函数应用 -> 单击 Diagnose and solve problems -> 然后单击 Function App Down or Reporting Errors 链接。这是截图:

2.在报告完成生成之前等待一段时间->然后检查以red exclamation mark开头的项目(通过使用您的代码,错误详细信息在Web App Restarted项目中。但它只显示一条常见消息,例如app crashes,不是stackoverflow):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2011-06-04
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多