2017-06-15 67 views
-1

我运行了我的服务器应用程序,使用NodeJS编写了大约15天。然后突然〜4小时前,它坠毁并重新启动。感谢forever脚本,我发现下面的错误:NodeJS - 可能内存不足?

(node:30317) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 completed listeners added. Use emitter.setMaxListeners() to increase limit 
(node:30317) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 completed listeners added. Use emitter.setMaxListeners() to increase limit 
FATAL ERROR: Committing semi space failed. Allocation failed - process out of memory 
1: node::Abort() [MyServerApp] 
2: 0x126264c [MyServerApp] 
3: v8::Utils::ReportOOMFailure(char const*, bool) [MyServerApp] 
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [MyServerApp] 
5: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [MyServerApp] 
6: v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector, char const*, char const*, v8::GCCallbackFlags) [MyServerApp] 
7: v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [MyServerApp] 
8: v8::internal::Runtime_AllocateInTargetSpace(int, v8::internal::Object**, v8::internal::Isolate*) [MyServerApp] 
9: 0xccdc6808506 
(node:14681) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 completed listeners added. Use emitter.setMaxListeners() to increase limit 
(node:14681) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 completed listeners added. Use emitter.setMaxListeners() to increase limit 

这是什么错误?是否由于我的物理服务器内存不足?

我的物理服务器是AWS t2 micro例如,内存压力大约是:78x/992MB

下面是我的服务器应用程序的信息,通过htop印刷:

VIRT: 1181M 
RES: 32816 
SHR: 9452 
CPU%: 0 
MEM%: 3.3 

感谢

+0

这通常意味着你正在创建新的对象而不废除旧的。所以,垃圾收集器不会删除它们。可悲的是,一些内存泄漏难以追踪。 – Desaroll

回答

1

Is it due to my physical server is running out of memory?

是。这可能是由于内存泄漏,或者是因为有太多的并发用户,您需要更多的RAM(--max_old_space_size=<size>)或更多优化的代码来处理所有这些问题。

假设它是一个内存泄漏是安全的,所以把NodeJS当作敌人来考虑,因为有人不会善意地告诉你你的错误在哪里。你需要学习调试,编写测试,运行它们......我的朋友,如果你认为这一点已经很艰难,我不敢告诉你最糟糕的事情还没有到来。

0

我认为(根据日志)在你的代码中的某个地方你反复将事件监听器附加到同一个事件发起者,并且这会造成内存泄漏,因为每个监听器都需要更多的内存。这很可能是一个bug,并且不需要附加所有这些重复的事件侦听器。

NodeJS有一个内存限制,但它是一个单独的相当复杂的问题,我不认为这是你的情况。