【问题标题】:All my Node.js apps crash unpredictably at the same time我所有的 Node.js 应用程序同时意外崩溃
【发布时间】:2015-07-22 22:53:16
【问题描述】:

我编写了两个简单的 Node.js 应用程序,每个应用程序都在一个端口(1337 和 1338)上运行一个服务器,并使用 PM2(和 Keymetrics)来保持它们的活力,但每隔几天就会全部三个 Node.js应用程序(包括 PM2)同时崩溃。我对 Node.js 还很陌生,不知道如何调查问题的根源。

详情:

两个服务器响应传入的 GET 请求。一种是响应 Bitbucket 触发器自动执行 GIT 获取/拉取,另一种将 URL 转换为 PDF 并将 PDF 发送回浏览器(使用 wkhtmltopdf)。它们在运行时都能正常工作。

我正在运行 Node.js v0.12.4。

当三个应用程序出现故障时,我的第一个迹象是来自 OpenShift 上的 Uptime (https://github.com/fzaninotto/uptime) 实例,它通过电子邮件告诉我我的一个 Node.js 服务器已关闭,并返回 "connect ECONNREFUSED"

几分钟后,Keymetrics 给我发电子邮件说"Agent is offline: Keymetrics Agent seems to be offline"

换句话说,我的所有 node.js 内容似乎同时下降;这两个应用程序甚至 PM2 都没有运行。我以为 Node 会为每个应用程序生成一个进程,那么它们怎么会同时崩溃呢?

我的尝试:

我已尝试挖掘 ~/.pm2/pm2.log,但无法在其中找到任何有用的信息。也许我只是不知道该寻找什么。

$ pm2 resurrect 总是能让一切恢复生机。

【问题讨论】:

  • 您确定 pm2 与节点应用程序一起出现故障吗? pm2与其管理的应用无关,不能随应用关闭,如果关闭,一定是环境有问题,而不是应用。
  • 感谢您的意见! Keymetrics 电子邮件告诉我 PM2 服务器监视器正在关闭,但下次其他应用程序关闭时,我将在服务器上仔细检查。如果这是真的(即所有三个 node.js 应用程序都在一起下降)那么我认为你是对的——它一定是环境。我已经重新命名了这个问题。
  • 您有可以测试的本地开发环境吗?为了好玩(但实际上:正确调试),在本地运行 pm2,使用您的两个应用程序,然后杀死 pm2,而不是您的应用程序。然后查看您的应用现在是否崩溃(例如,如果您忘记在 pm2 调用周围添加安全检查,那么可以肯定缺少 pm2 实例会使您的应用崩溃)
  • 崩溃时的主机状态是什么?以内存/cpu 利用率为例,我之前经历过 PM2 崩溃
  • @sayume 我认为您对这种推理方式有所了解。所有节点应用程序(PM2 加上 2 个应用程序)肯定都在停止,要么同时停止,要么彼此非常接近。那么,什么样的环境问题会导致这样的事情呢?

标签: node.js pm2


【解决方案1】:

请升级到最新的 PM2 版本:

$ npm install pm2 -g
$ pm2 update

【讨论】:

  • 我已经这样做了,但问题仍然存在。当前运行 0.14.7。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2018-04-25
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
相关资源
最近更新 更多