什么原因会导致Node.js打印Killed并退出?

63

我有一个Node.js应用程序,在启动应用程序时从Mysql加载一些数据到Redis中。在我们修改了Mysql中的数据之前,它一直工作得很好。

现在它只是显示一个Killed消息并退出。

我正在尝试找出问题所在,但使用node-inspector进行调试很难,因为在--debug运行时问题不会出现。

我不认为我的问题在于数据本身,因为它在我的本地机器上工作正常,但在我的生产环境中却无法工作。

我的问题是,是什么原因导致了Killed消息? 是Node.js还是Mysql驱动程序或其他地方?

3个回答

73

检查系统日志以查看与 Node 被杀掉有关的消息。你的 Node 应用程序可能正在使用过多的内存,从而被 内存不足(OOM)杀手 杀死。


10
在我的情况下,实际上我在/var/log/syslog中看到:Sep 4 16:21:32 hosting kernel: Out of memory: Kill process 29620 (nodejs) score 107 or sacrifice child Sep 4 16:21:32 hosting kernel: Killed process 29620 (nodejs) total-vm:1054732kB, anon-rss:136168kB, file-rss:0kB。感谢提示! - weekens
5
如果您正在使用红帽系统,该日志位于/var/log/messages。 对我来说,内存不足似乎也是个问题。 - B T
你太棒了!我刚开始在一个使用Docker的弹性Beanstalk机器上调查进程死亡问题,查看系统生成的每个日志文件,当我决定向谷歌求助时,找到了你的帖子,并在messages.log中找到了确切的问题。非常感谢! - Michael
在这种情况下,如何解决“内存不足杀死进程”的问题?增加内存吗? node --max-old-space-size=31744 dataTreatment.js #将其增加到31GB左右? - Christopher Martinez
1
内存不足杀手是一个内核特性,因此它完全发生在 Node 之外——如果发生了这意味着你的物理内存不足。你可能需要减少正在运行的进程的内存使用量,而不是增加它。@ChristopherMartinez - lanzz

2

我不确定Redis是否是导致“Killed”消息的原因,但这是我的问题的原因。

我向多个管道发送了太多数据,因为我最初认为这是使用流水线技术(自动)的方法。


你找到解决方案了吗? - Julio Marins

0
我正在使用Docker、Node、Express和Prisma。这个问题发生在jest测试期间。通常增加内存大小可以帮助解决问题,使用命令node --max-old-space-size=4096 jest --runInBand。然而,我在.wslconfig中设置了4GB的内存(尝试解决另一个问题),所以无法使用max-old-space-size中指定的额外内存。我将内存设置回6GB并重新启动了Docker,这解决了Killed的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接