【发布时间】:2019-08-12 09:21:50
【问题描述】:
我的节点服务器现在内存不足。我非常努力地调试,但问题仍然相同。 我收到此错误
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
4|app | 1: node::Abort() [node /home/app/server.js]
4|app | 2: 0x1356bec [node /home/app/server.js]
4|app | 3: v8::Utils::ReportOOMFailure(char const*, bool) [node /home/app/server.js]
4|app | 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node /home/app/server.js]
4|app | 5: v8::internal::Factory::NewFixedArray(int, v8::internal::PretenureFlag) [node /home/app/server.js]
4|app | 6: v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Allocate(v8::internal::Isolate*, int, v8::internal::PretenureFlag) [node /home/app/server.js]
4|app | 7: v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Rehash(v8::internal::Handle<v8::internal::OrderedHashSet>, int) [node /home/app/server.js]
4|app | 8: v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::EnsureGrowable(v8::internal::Handle<v8::internal::OrderedHashSet>) [node /home/app/server.js]
4|app | 9: v8::internal::Runtime_SetGrow(int, v8::internal::Object**, v8::internal::Isolate*) [node /home/app/server.js]
4|app | 10: 0x7a8879046fd
有时也会出现这个错误
4|app | <--- Last few GCs --->
4|app |
4|app | [11385:0x2b893d0] 764692 ms: Mark-sweep 1398.5 (1871.3) -> 1398.5 (1871.3) MB, 27920.5 / 2.1 ms allocation failure GC in old space requested
4|app | [11385:0x2b893d0] 789281 ms: Mark-sweep 1398.5 (1871.3) -> 1398.3 (1797.3) MB, 24586.0 / 4.6 ms last resort
4|app | [11385:0x2b893d0] 797403 ms: Mark-sweep 1398.3 (1797.3) -> 1398.3 (1758.8) MB, 8119.9 / 1.0 ms last resort
4|app |
4|app |
4|app | <--- JS stacktrace --->
4|app |
4|app | ==== JS stack trace =========================================
4|app |
4|app | Security context: 0x7e7bf028799 <JSObject>
4|app | 1: add [native collection.js:~111] [pc=0x7a887d1b539](this=0x13ebc6615671 <Set map = 0x18534a9053d9>,p=0x1d9c6aee7719 <String[24]: 5b9827afc5635e2a08f49b6f>)
4|app | 2: baseUniq [/home/app/node_modules/waterline/node_modules/lodash/index.js:~2670] [pc=0x7a887d4d51a](this=0x243308d07421 <JSGlobal Object>,array=0x13ebc66154d9 <JSArray[469241]>,iteratee=0x13ebc6615531 <JSFunction (sfi = 0x3fc29...
请帮助我找出哪些代码正在炸毁堆。我尝试使用工具找出泄漏,但它只告诉内存泄漏而不是哪里。
【问题讨论】:
-
你确定这是内存泄漏吗?也就是说,您可以先尝试增加最大堆大小,然后查看错误是否仍然发生。如果是,请查看此链接,当我遇到同样的问题时,它对我有很大帮助 -> blog.risingstack.com/case-study-node-js-memory-leak-in-ghost
-
谢谢,我会在增加堆大小后更新
-
正如@eol 所说,尝试运行 node --max-old-space-size=8192
.js。我们无法从您得到的错误中真正弄清楚泄漏发生在哪里。 -
我知道发生泄漏的地方是第三方库(waterline.js)来查询数据库。还在测试东西。旧空间在 v8 领域中意味着什么? @BrankoZivanovic
-
默认情况下,你的 nodejs 进程最多可以占用 512MB,当你超过它就会崩溃,就像它一样。您可以使用 node --max-old-space-size=2048 index.js 将其增加到 2gb 或更高,然后查看它是否崩溃,或者如果可以,您甚至可能无法在没有它的情况下分析 CPU 使用率' t 甚至正确启动脚本。祝你好运!
标签: node.js memory-leaks heap-memory