如何排查Node.js中未移除事件监听导致的内存泄漏?
- 内容介绍
- 文章标签
- 相关推荐

由于内存泄漏在Node.js中非常的常见,可能在浏览器中应用javascript时,对于其内存泄漏不是特别敏感,但作为服务器语言运行时,你就不得不去考虑这些问题。由于很小的逻辑可能导致服务器运行一天或者一个星期甚至一个月才会让你发现内存不断上涨,而终于会到那天你不得不重启服务来保护服务器的性能,那么这种问题就有必要在上线前进行一个系统检测,一边在上线后能够有一个有效的监控程序来保证运行平安。 我真的搞不懂为什么大家对这个事情不重视,难道等着服务器崩了才后悔吗?唉,真是让人头疼,对吧,你看。。
什么是内存泄漏
太顶了。 内存泄漏也称作 存储渗漏 ,用动态存储分配函数分配的内存空间在使用完毕后没有及时释放, 这部分内存就无法被程序 使用,从而造成资源浪费。如果长期发生,会导致系统性能下降甚至崩溃。想想都可怕!
Node.js 事件监听与内存泄漏
你没事吧? Node.js 的事件监听也可能出现的内存泄漏。比方说对同一个事件重复监听,忘记移除,将造成内存泄漏。这种情况很容易在复用对象上添加事件时出现,所以事件重复监听可能收到如下警告: Warning: Possible EventEmitter memory leak detected。11 haha listeners added。
Use emitter。setMaxListeners to increase limit 比方说,Node.js 中 Agent 的 keepAlive 为 true 时,可能造成的内存泄漏。当 Agent keepAlive 为 true 的时候,将会复用之前使用过的 socket,如果在 socket 上添加事件监听,忘记清除的话,主要原因是 socket 的复用,将导致事件重复监听从而产生内存泄漏,好吧好吧...。

由于内存泄漏在Node.js中非常的常见,可能在浏览器中应用javascript时,对于其内存泄漏不是特别敏感,但作为服务器语言运行时,你就不得不去考虑这些问题。由于很小的逻辑可能导致服务器运行一天或者一个星期甚至一个月才会让你发现内存不断上涨,而终于会到那天你不得不重启服务来保护服务器的性能,那么这种问题就有必要在上线前进行一个系统检测,一边在上线后能够有一个有效的监控程序来保证运行平安。 我真的搞不懂为什么大家对这个事情不重视,难道等着服务器崩了才后悔吗?唉,真是让人头疼,对吧,你看。。
什么是内存泄漏
太顶了。 内存泄漏也称作 存储渗漏 ,用动态存储分配函数分配的内存空间在使用完毕后没有及时释放, 这部分内存就无法被程序 使用,从而造成资源浪费。如果长期发生,会导致系统性能下降甚至崩溃。想想都可怕!
Node.js 事件监听与内存泄漏
你没事吧? Node.js 的事件监听也可能出现的内存泄漏。比方说对同一个事件重复监听,忘记移除,将造成内存泄漏。这种情况很容易在复用对象上添加事件时出现,所以事件重复监听可能收到如下警告: Warning: Possible EventEmitter memory leak detected。11 haha listeners added。
Use emitter。setMaxListeners to increase limit 比方说,Node.js 中 Agent 的 keepAlive 为 true 时,可能造成的内存泄漏。当 Agent keepAlive 为 true 的时候,将会复用之前使用过的 socket,如果在 socket 上添加事件监听,忘记清除的话,主要原因是 socket 的复用,将导致事件重复监听从而产生内存泄漏,好吧好吧...。

