Node.js 进程在 aws 实例上被杀死

Posted

技术标签:

【中文标题】Node.js 进程在 aws 实例上被杀死【英文标题】:Node.js process getting killed on aws instances 【发布时间】:2016-08-22 08:50:15 【问题描述】:

我们正在尝试将我们的一个节点 js 应用程序(AngularJS/NodeJS 技术堆栈)部署到生产环境。随机地,一些 ec2 实例只是随着节点进程被杀死而关闭。但是没有记录应用程序/系统级别的错误消息。我们无法在本地/dev/it 环境中复制此问题。有没有人遇到过类似的事情?任何帮助深表感谢。谢谢!

【问题讨论】:

你是如何启动 NodeJS 进程的?您可能需要考虑使用 Forever 之类的服务:github.com/foreverjs/forever 我们正在后台使用 nohup 命令启动 node js 服务器。 如果异常导致进程退出,则不会重新启动 Node 进程。你只需要安装 Forever 并使用它。 我看到了同样的行为。 Nodejs进程随机消失,日志中没有任何内容。不知道 aws 是不是罪魁祸首... 【参考方案1】:

我现在这是一个老问题,以防其他人遇到同样的问题。 很可能是您的内存不足,正如here. 所解释的那样,您可以使用 dmesg 命令 (linux) 进行验证。要修复它,您可以添加更多内存或添加交换卷。 一种方法是关注answer:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1
// enable after reboot
/var/swap.1 swap swap defaults 0 0

【讨论】:

【参考方案2】:

默认情况下,nodejs 应用程序会在没有客户端连接时停止,您可以使用forever 等工具来保持您的nodejs 应用程序运行

【讨论】:

以上是关于Node.js 进程在 aws 实例上被杀死的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中杀死生成的进程

如果脚本被杀死,node.js 生成的进程仍然存在

Node.js 进程在 AWS Fargate 中的行为如何?

停止Node服务器

尽管用户角色,AWS Batch 作业在 S3 上被拒绝访问

如何在 AWS Lambda 中使用 Node.js 列出我的所有 Amazon EC2 实例?