NodeJ-接近堆限制分配失败-JavaScript堆内存不足

时间:2019-11-25 03:48:35

标签: node.js ubuntu amazon-ec2 cron

我有一个节点js应用程序,它在AWS EC2中作为m5xlarge实例和ubuntu 18.04操作系统运行,它有一个main.js文件,并且在主文件中我正在使用{{ 1}}计划多个cron作业,一旦安排了这些作业使用另一个文件node-cron启动应用程序,我就会间歇性地遇到内存不足错误并且服务器停止日志,如下所示-

app.js

内存利用率和运行状况检查监视器如下-

memory utilization and health check

峰值是由于cron作业间隔运行,最高的是每小时的cron作业。

现在我的假设是,这可能是由于任何cron作业失败而导致FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1: node::Abort() [node /home/ubuntu/XXXXXX/main.js] 2: 0x89371c [node /home/ubuntu/XXXXXX/main.js] 3: v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node /home/ubuntu/XXXXXX/main.js] 4: v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node /home/ubuntu/XXXXXX/main.js] 5: 0xe617e2 [node /home/ubuntu/XXXXXX/main.js] 6: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node /home/ubuntu/XXXXXX/main.js] 7: v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node /home/ubuntu/XXXXXX/main.js] 8: v8::internal::Heap::AllocateRawWithRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [node /home/ubuntu/XXXXXX/main.js] 9: v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [node /home/ubuntu/XXXXXX/main.js] 10: v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [node /home/ubuntu/XXXXXX/main.js] 11: 0x2a583f5041bd 中的内存不足错误,因此main.js中的应用程序也停止了,或者应用程序本身失败了{{1 }} cron作业调度如下所示-

app.js

这是有关此的htop预览-

htop preview

几个问题-  -为什么在main.js内显示main.js树,这种嵌套正常吗?  -如果相同,为什么两者的资源内存利用率不同?

我尝试如下增加每个cron的内存-

app.js

但是它仍然失败。我的问题如下-

  • 我如何找出问题的根源,这到底是由于克朗还是由于应用?
  • 我该如何解决问题?

1 个答案:

答案 0 :(得分:0)

使用“ Top”之类的命令来查找节点进程正在使用的内存量。我认为节点脚本不会使用所有可用内存。您也可以尝试使用NODE_OPTIONS分配更多的内存。 例如,节点SomeScript.js --max-old-space-size = 8192