Azure Linux Web 应用程序(节点)崩溃并显示消息:“分段错误(核心转储)”并重新启动

Posted

技术标签:

【中文标题】Azure Linux Web 应用程序(节点)崩溃并显示消息:“分段错误(核心转储)”并重新启动【英文标题】:Azure Linux Web Apps (Node) Crash with message: " Segmentation fault (core dumped) " and restart 【发布时间】:2021-05-03 14:27:09 【问题描述】:

本周(从 2021 年 1 月 27 日到今天 2021 年 1 月 29 日),两个在 linux 上运行 node js 10.14.1 版本的 azure webapps 开始意外崩溃。他们很少崩溃(就我所见,只有 4 次,第一个是 2,第二个是 2)。我收到的唯一记录消息是“分段错误(核心转储)”,然后应用程序重新启动。它似乎是随机发生的,但绝不会在应用程序处于中间状态时发生,只有在它处理某些请求时才会发生。有时应用程序在负载非常轻的情况下崩溃,有时在负载非常高的情况下崩溃,这是我无法测量的任何东西都无法预测的,或者我至少没有看到它。

这两个应用程序都运行 NestJS 框架,它们都是 javascript 后端解决方案,它们已经运行了 3 年了。在过去的 2 个月里,我没有更新或添加任何新的 npm 包或更改任何类型的配置。有谁知道如何调试这个?我已经为所有这些应用程序启用了文件系统日志,我从 KUDU 日志中得到的只是我告诉你的消息。遗憾的是,我的支持计划中没有技术支持。过去也发生过这种问题是由 azure 更新引起的,所以这是我最常想到的地方,但从来没有出现过这个错误,所以我想确定一下。

【问题讨论】:

【参考方案1】:

更新

    打开 WebSSH。

    使用以下命令安装segfault-handler

    root@ddc****** :/home# apt-get upgrade
    root@ddc****** :/home# apt-get install build-essential
    root@ddc****** :/home# npm install segfault-handler
    

    那么你可以使用segfault-handler

您可以先阅读此博客。

How to Debug Node.js Segmentation Faults

我认为你可以Find the culprit 并修复它。

为此,您可以使用Segfault-Handler 模块。只需运行npm install segfault-handler,然后在应用程序代码的开头添加以下内容:

const SegfaultHandler = require('segfault-handler');
SegfaultHandler.registerHandler('crash.log');

【讨论】:

谢谢!尽管在 azure 服务上写入文件必然会产生问题,但实际上我认为这甚至是不可能的,因为启用了持续集成,但我会看看是否可以打开本地 docker 并尝试复制问题。 遗憾的是,如果没有 python,我无法在我的系统上安装这个 npm,并且不确定当我在 azure appservice 上部署时这是否可行。 @Periklis 我已经更新了我的答案,它对我有用。 @Periklis 您的问题解决了吗?有进展吗? 是的,有一些进展。我想我找到了一个可能导致这种情况的本机模块。它是 bunyan 记录器,它具有称为 dtrace-provider 的本机模块依赖项。到目前为止,这似乎是问题所在,尽管不知道为什么在 3 年顺利运行而没有任何问题后突然开始出现问题。我能够与 MS 技术支持人员取得联系,以澄清这个问题,我会回到这篇文章进行更新。非常感谢您的意见!【参考方案2】:

按照@Jason Pan 的回答,我访问了How to Debug Node Segfaults 的博客文章,发现可能的问题可能是本机模块。在此之前,我不知道原生模块,也不知道它们会造成任何潜在的损害。我无法在 azure 服务中安装 segfault-handler npm 但是我确实安装了 native-modules npm 这向我展示了 bunyan 记录器(我在我的所有 linux 节点服务器中用作主要后端记录器)有一个名为 dtrace- provider 是一个本地模块。删除此问题后,问题停止发生!我仍然认为通过更新或类似的方式在后台更改了一些 azure 进程,突然之间,这个 npm 开始导致崩溃。我只是发布这个以防它帮助任何人在不安装 segfault-handler 的情况下调试它。

【讨论】:

以上是关于Azure Linux Web 应用程序(节点)崩溃并显示消息:“分段错误(核心转储)”并重新启动的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Native Weekly | Jenkins决定未来重点三方向,Azure多项云服务崩

Azure Web App节点部署,更改应用程序根目录?

Azure 应用服务响应 Web 应用(Linux Web 应用)容器无法启动

Gitlab CI/CD - 在 Azure Linux WebApp 上部署节点应用程序

通过 Azure Devops 将 .Net Core 3.1 Web 应用程序部署到 Azure Linux Web 服务时出错

带有 Linux 日志记录的 Azure Web 应用程序不起作用