当服务器出现故障/崩溃时,Node JS会自动重启所有JS进程

Fai*_*zan 12 javascript restart amazon-ec2 node.js forever

我正在使用永远的js来保持我的节点服务器在AWS EC2上全天候运行.

我用这个命令

forever start index.js
Run Code Online (Sandbox Code Playgroud)

但是,我注意到有一段时间它会随机停止进程并且我的网站出现故障.我必须手动ssh到我的服务器再次运行它:

forever restartall
Run Code Online (Sandbox Code Playgroud)

然后它会备份.有没有办法我可以定义超时,假设服务器/网站在5秒内没有响应200,然后自动重启所有永久进程?

我是新手,如果有人能为我的案例一步一步地举例,那就太棒了.

boe*_*m_s 18

NodeJS服务器不应该无缘无故地停止.大多数情况下,由于500错误将停止服务器,然后您将不得不重新启动它. forever是使用node默认情况下启动服务器.

nodemon 是一个npm包,可在代码更改或服务器停止时重新启动服务器.

您可以使用forevernodemon通过一起做:

forever start nodemon --exitcrash app.js
Run Code Online (Sandbox Code Playgroud)

要么

forever start -c nodemon app.js
Run Code Online (Sandbox Code Playgroud)


Vis*_*hra 12

我建议使用PM2

哪个是运行服务器生产服务器的最佳选择

以这种方式运行应用程序有什么好处?

  • 易于设置和运行.
  • 如果应用程序崩溃,PM2将自动重启您的应用程序.

  • PM2将记录未处理的异常 - 在本例中,在/home/safeuser/.pm2/logs/app-err.log中的文件中.

  • 使用一个命令,PM2可以确保在服务器重新启动时它管理的任何应用程序都会重新启动.基本上,您的节点应用程序将作为服务启动.

参考:https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps


Fai*_*zan 0

弄清楚了。该问题是由于我的 EC2 实例中的可用 RAM 较少造成的。我将 RAM 升级到 2 GB,到目前为止还没有遇到崩溃的情况。

节点也可能会出现未捕获的异常错误,但我的主要问题是由于内存较少。

希望这对其他人有帮助。

  • 虽然这是您问题的答案,但它并不是真正问题所提出的答案。将来您可能会在负载增加时再次遇到此问题,并且垂直扩展通常不是答案。 (6认同)
  • 你真的应该像我上面的回答一样检查 pm2 。您可以使用“pm2 monit <yourapplication>”随时查看实时内存使用情况 (2认同)