rou*_*bin 7 memory-leaks node.js express server-sent-events
当我将多个EventSource客户端连接到它时,我想我正在使用Express应用程序遇到内存泄漏.在连接客户端并向其发送x消息并断开它们之后,我的Express应用程序仅释放少量分配的Heap/RSS.
为了确认这一点,我在启动服务器时保存了一个Heapdump,在连接了7,000个客户端并向每个客户端发送x消息之后保存了一个.在等待堆快照之前,我等待了一段时间让GC有机会进行清理.
为了比较这些堆快照,我将它们加载到Chrome开发者工具配置文件视图中,然后选择"比较"模式.
我的问题是:
1)如何解释这些数字? (有关参考,请参阅附加的堆快照截图.)
2)例如,看起来Socket对象几乎没有释放任何对象,这是正确的吗?
3)你能给我更多提示来调查这个问题吗?

您可以避免内存泄漏,并且作为奖励可以避免垃圾收集器。您所要做的就是对象轮询。
你可以做类似的事情
var clientsPool = new Array(1000);
var clientsConnected = [];
Run Code Online (Sandbox Code Playgroud)
当新客户端连接时,您会执行以下操作
var newClient = clientsPool.pop();
//set your props here
clientsConnected.push(newClient);
Run Code Online (Sandbox Code Playgroud)
这是避免垃圾收集器并防止内存泄漏的好方法。当然,还有更多的工作要做,您必须仔细管理,但这对于性能来说是完全值得的。
有一个很棒的讨论,请看这里 https://www.youtube.com/watch?v=RWmzxyMf2cE
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |