NodeJS内存占用量和OOM

时间:2019-02-23 21:42:06

标签: node.js microservices

我正在运行一个小型的nodejs应用程序,并开始收到其中一项操作的OOM错误:

  

第0行出现致命错误

     

进程内存不足后返回的API致命错误处理程序

     

FailureMessage对象:0x7f0e269659b0

我进行了内存转储,在将错误打印到控制台之前和之后,它们的大小约为26MB。另外我的进程内存使用率(Ubuntu是主机)不是很高:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                              
21069 ashley    20   0 1185368  39584  24616 S   0.0  0.2   0:00.70 node   

如果我正确解释了此输出,则节点进程使用的驻留内存少于40MB。基本上没有内存泄漏或类似的东西。根据google的说法,Ubuntu上节点进程的默认内存为1.7GB。现在,我很困惑为什么我的进程失败了,为什么节点进程占用了这么多内存。根据我发现,大多数人只是使用--max-old-space-size标志来增加可用于节点的内存。如果是这样的解决方案,我真的很困惑,为什么节点如此耗电,使用springboot用Java编写的类似应用程序最有可能在仅256-512MB的内存下表现出色。

并且,如果nodejs VM实例至少需要2-3GB的内存,那么就云成本而言,这将使节点微服务的价格明显高于Java微服务。

我仍然希望我的NodeJS知识存在差距,并且我的简单节点应用程序可以仅使用512MB-1GB的微型VM来适合VM。

我将不胜感激任何想法,链接和建议。

非常感谢!

1 个答案:

答案 0 :(得分:0)

该错误是由于传递了不正确的值(对象而不是原始对象而不是Sequelize)导致内存泄漏的。通过查看内存转储检测到该问题。