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

Azure Linux Web Apps (Node) Crash with message: " Segmentation fault (core dumped) " and restart

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

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

更新

  1. 打开 WebSSH。

  2. 使用下面的命令安装segfault-handler

    root@ddc****** :/home# apt-get upgrade
    root@ddc****** :/home# apt-get install build-essential
    root@ddc****** :/home# npm install segfault-handler
    
  3. 那么就可以使用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');

按照@Jason Pan 的回答,我访问了博客 post How to Debug Node Segfaults and saw that the possible issue could be a native module. Before this, I did not know about native modules or that they could do any potential damage. I could not install the segfault-handler npm in azure service howerver I did install the native-modules npm,它向我展示了 bunyan 记录器(我在所有 linux 中都将其用作主要后端记录器)节点服务器)有一个名为 dtrace-provider 的依赖项,它是一个本机模块。删除此问题后,问题不再发生!我仍然认为一些 azure 进程在后台发生了变化,更新或类似的东西,突然间这个 npm 开始导致崩溃。我只是 post 这样做,以防它可以帮助任何人在不安装段错误处理程序的情况下进行调试。