【问题标题】:strange heap out of memory nodejs奇怪的堆内存不足nodejs
【发布时间】: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


【解决方案1】:

它是名为 Waterline.js 的第三方 ORM 库,配置错误,集合之间存在冗余映射,因此将任何文档添加到 db 中都会检查文档属于哪个用户左右。并且集合恰好有 130K+ 文档,所以我认为它会在内存中获取所有内容并运行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2020-12-19
    • 2021-06-12
    • 1970-01-01
    • 2011-11-13
    • 2023-03-21
    相关资源
    最近更新 更多