Co、递归调用引发的内存泄漏

  1. 云栖社区>
  2. Node.js 性能平台>
  3. 博客>
  4. 正文

Co、递归调用引发的内存泄漏

hyj1991 2018-04-02 18:00:42 浏览13138
展开阅读全文

前言

我们知道,同步的递归写法,如果在退出递归条件失效时,会快速因为栈溢出导致进程挂掉。而在某些场景下,我们会采用异步的递归写法来规避这个问题:

async function recursive() {
  if( active ) return;
  // do something
  await recursive();
}

关键字 await 后面的函数调用可能会跨越多个 event loop,这样的写法下不会出现栈溢出的错误。然而这种写法其实也不是万无一失的,我们来看下面这个生产故障案例。

发现问题

客户接入 Node.js 性能平台 后,通过监控经常出现内存增长导致的 OOM,于是客户加上了一条告警规则:@heap_used / @heap_limit > 0.5,目的是在堆较小但是发生泄漏时能正常输出 heapsnapsh

网友评论

登录后评论
0/500
评论
hyj1991
+ 关注
所属云栖号: Node.js 性能平台