NodeJS 终止错误的差异

Posted

技术标签:

【中文标题】NodeJS 终止错误的差异【英文标题】:Difference in NodeJS termination errors 【发布时间】:2021-03-28 23:44:00 【问题描述】:

我有一个 NodeJS 服务器在我开始的后台运行:

NODE_ENV=production npm start  >> stdout.txt 2>> stderr.txt &

当我重新启动它时:

kill <node process id>; NODE_ENV=production npm start  >> stdout.txt 2>> stderr.txt &

我有时会在日志中看到很长的错误:

/opt/bitnami/nodejs/bin/.node.bin[8878]: ../src/node.cc:663:void node::ResetStdio(): 断言 `(0) == (err)' 失败。 1: 0x9ef190 节点::Abort() [/opt/bitnami/nodejs/bin/.node.bin] 2:0x9ef217 [/opt/bitnami/nodejs/bin/.node.bin] 3: 0x9bd657 节点::ResetStdio() [/opt/bitnami/nodejs/bin/.node.bin] 4: 0x9bd6c0 节点::SignalExit(int) [/opt/bitnami/nodejs/bin/.node.bin] 5:0x7fca6718e390 [/lib/x86_64-linux-gnu/libpthread.so.0] 6:0x7fca66ebaad3 epoll_wait [/lib/x86_64-linux-gnu/libc.so.6] 7:0x13200b0 [/opt/bitnami/nodejs/bin/.node.bin] 8: 0x130e26b uv_run [/opt/bitnami/nodejs/bin/.node.bin] 9: 0xa31ec3 节点::NodeMainInstance::Run() [/opt/bitnami/nodejs/bin/.node.bin] 10: 0x9c1cc8 节点::Start(int, char**) [/opt/bitnami/nodejs/bin/.node.bin] 11: 0x7fca66dd3840 __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6] 12:0x95c085 [/opt/bitnami/nodejs/bin/.node.bin] 中止(核心转储) npm 错误!代码生命周期 npm 错误!错误号 134 npm 错误! App@0.0.1 开始:`node app.js` npm 错误!退出状态 134 npm 错误! npm 错误! App@0.0.1 启动脚本失败。 npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! /home/bitnami/.npm/_logs/2020-12-17T21_05_41_838Z-debug.log npm[8862]: ../src/node.cc:663:void node::ResetStdio(): 断言 `(0) == (err)' 失败。 1: 0x9ef190 节点::Abort() [npm] 2:0x9ef217 [npm] 3: 0x9bd657 节点::ResetStdio() [npm] 4:0x7fd18c8c7008 [/lib/x86_64-linux-gnu/libc.so.6] 5:0x7fd18c8c7055 [/lib/x86_64-linux-gnu/libc.so.6] 6:0x994907 [npm] 7:0xbc9a29 [npm] 8: 0xbcb817 v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*) [npm] 9:0x13a72b9 [npm]

有时我会看到一个简短的错误:

终止 npm 错误!代码生命周期 npm 错误!错误号 143 npm 错误! App@0.0.1 开始:`node app.js` npm 错误!退出状态 143 npm 错误! npm 错误! App@0.0.1 启动脚本失败。 npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! /home/bitnami/.npm/_logs/2020-12-17T21_06_43_530Z-debug.log

两者有什么区别,重启NodeJS服务器的最佳方式是什么?

【问题讨论】:

【参考方案1】:

不要杀死服务器(因为它可能会离开绑定 关闭服务器的最佳方法是实现一种正常关闭服务器的机制。

例如,您可以通过捕获SIGINT (or any other signal exposed to a process) 并处理服务器终止来做到这一点。

在 nodejs 中,您可以通过使用 process.on() 来做到这一点

process.on("SIGINT", () => 
  console.log("SIGINT received");
);

发送一个 SIGINT 给进程,做

kill -s SIGINT <node process id>

你可能也对this thread感兴趣

【讨论】:

谢谢!这回答了另一个问题:***.com/questions/64542392/… 处理短错误但不处理长错误。它可能来自服务器正忙于处理某些请求吗?如果是,如何等待请求栈清空后再终止?

以上是关于NodeJS 终止错误的差异的主要内容,如果未能解决你的问题,请参考以下文章

获取 NodeJS 程序退出码

Nodejs学习之路

AWS Elastic Beanstalk / NodeJS / Nginx 错误:不断收到 502 bad gateway

HTTP 连接在 Amazon EC2 上托管的 nodejs 应用程序中过早终止

sqlserver 2012数据还原,RESTORE DATABASE 正在异常终止。 (Microsoft SQL Server,错误: 3174)

Node JS - 记录工作集群最后一个异常