我正在运行一个小型的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。
我将不胜感激任何想法,链接和建议。
非常感谢!
答案 0 :(得分:0)
该错误是由于传递了不正确的值(对象而不是原始对象而不是Sequelize)导致内存泄漏的。通过查看内存转储检测到该问题。