我有一个节点js应用程序,它在AWS EC2
中作为m5xlarge
实例和ubuntu 18.04
操作系统运行,它有一个main.js
文件,并且在主文件中我正在使用{{ 1}}计划多个cron作业,一旦安排了这些作业使用另一个文件node-cron
启动应用程序,我就会间歇性地遇到内存不足错误并且服务器停止日志,如下所示-
app.js
内存利用率和运行状况检查监视器如下-
峰值是由于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预览-
几个问题- -为什么在main.js内显示main.js树,这种嵌套正常吗? -如果相同,为什么两者的资源内存利用率不同?
我尝试如下增加每个cron的内存-
app.js
但是它仍然失败。我的问题如下-
答案 0 :(得分:0)
使用“ Top”之类的命令来查找节点进程正在使用的内存量。我认为节点脚本不会使用所有可用内存。您也可以尝试使用NODE_OPTIONS分配更多的内存。 例如,节点SomeScript.js --max-old-space-size = 8192