【问题标题】:NodeJS Script killed by SIGKILL when running on Forever在 Forever 上运行时被 SIGKILL 杀死的 NodeJS 脚本
【发布时间】:2015-11-26 07:09:30
【问题描述】:

我有一个 Node.JS 应用程序,它执行 MySQL 数据库访问、一些 HTTP 请求、将​​响应 CSV 保存到文件、读取同一个文件并写入 Cassandra。我在 Ubuntu 14.04 上运行它,并且使用 Express 来公开执行上述所有任务的 Web API。

我有另一个用 Node.JS 编写的应用程序,它为 200 个用户调用 API。因为它是 Node.JS,所以调用是异步的。

我使用以下方式运行 Express 应用:

node index.js

当我运行另一个命中 Express API 的脚本时,该脚本对 200 个用户运行良好,并得到响应:

{"status":200,"message":"Got the data and saved to the DB"}

当我使用 Forever 运行同一个 Express 应用程序时:

forever start -w index.js

然后为 200 个用户运行 cron 脚本,我得到了

err { [Error: socket hang up] code: 'ECONNRESET' }

当我打开日志文件时,这是我发现的:

error: restarting script because add changed error: Forever detected script was killed by signal: SIGKILL error: Script restart attempt #5

既然应用程序在前台运行时运行良好,而在后台运行时被杀死,它是否需要对分配给守护进程的资源进行处理?

我应该启动我的服务器吗?或者有什么办法可以为 Express App 分配更多资源?

【问题讨论】:

  • 您是否尝试在没有-w 标志的情况下运行forever
  • 我做了,但结果相同。我不断地将新代码从位桶拉到这个存储库,因此使用了 -w 标志。
  • 知道了!必须在 .foreverignore 中添加一个文件夹
  • 你能解释一下方法吗

标签: node.js forever sigkill


【解决方案1】:

您似乎在通过拉取新代码来更改文件或文件属性时遇到问题。

尝试为隐藏的子目录配置 .foreverignore,如下所述

https://github.com/foreverjs/forever/issues/235

如果您无法忽略或停止更新该文件,您需要永远停止使用以观看文件更新

我可以推荐 http://supervisord.org/ 在 Linux 机器上运行 nodejs 应用程序

【讨论】:

  • 我可以在永远本身内显式分配资源吗?可能是内存问题。
  • 什么意思?我认为这与资源无关,通过观察文件更改来永远重新启动自己,就是这样。如果内存不足,您将看到 ENOMEM 左右的错误。无论如何,你可以用资源做的所有事情 - 改变ulimit,但它是关于描述符,套接字
猜你喜欢
  • 2017-07-21
  • 2021-05-02
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
相关资源
最近更新 更多