有时会发生此错误。
<--- Last few GCs --->
[2856:00000253F09D3B90] 11688472 ms: Mark-sweep 1529.8 (1619.4) -> 1529.7 (1583.4) MB, 1835.6 / 0.0 ms last resort GC in old space requested
[2856:00000253F09D3B90] 11690272 ms: Mark-sweep 1529.7 (1583.4) -> 1529.7 (1579.4) MB, 1799.7 / 0.0 ms last resort GC in old space requested
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 000001F6C9E25739 <JSObject>
1: completeMany [C:Usersmobasher.fasihyDocumentsGitHubjobsaf-servernode_modulesmongooselibquery.js:~1459] [pc=0000006F3C3482B8](this=0000029E4B604F01 <JSGlobal Object>,model=00000090CCBE6729 <JSFunction model (sfi = 000001A244DDB931)>,docs=0000025B74FA8591
<JSArray[53714]>,fields=0000025B74FA8FF1 <Object map = 00000207F58823B9>,userProvidedFields=0000025B74FA9029 <Object map = 000...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::DecodeWrite
2: node_module_register
3: v8::internal::FatalProcessOutOfMemory
4: v8::internal::FatalProcessOutOfMemory
5: v8::internal::Factory::NewUninitializedFixedArray
6: v8::internal::WasmDebugInfo::SetupForTesting
7: v8::internal::interpreter::BytecodeArrayRandomIterator::UpdateOffsetFromIndex
8: 0000006F3C2043C1
[nodemon] app crashed - waiting for file changes before starting...
随机出现上述错误,并且应用程序崩溃。
虽然您可以使用David的解决方法,但我建议搜索根本原因。
内存不足错误的可能原因并不多:
- 递归调用太长,以至于中断了堆栈跟踪
- 您创建了一个非常重的对象
- 您一次获得了大量数据
如果根本原因是递归调用,这是node.js充满回调时的常见错误,则有一行将控制权返回事件循环,以便它可以自行清除(process.nextTick
或类似的东西(
对于另外两个原因,现在最有可能是罪魁祸首,尤其是在使用数据库时,您需要使用流,这样您就永远不会在内存中一次获得完整数据,或者找到另一种方法来划分工作。
哪个进程抛出错误?
尝试设置max_old_space_size
设置(以 MB 为单位(
node --max_old_space_size=4096 <yourScriptHere>