gpt4 book ai didi

node.js - 存在内存泄漏的 NodeJS 应用程序,它在哪里?

转载 作者:搜寻专家 更新时间:2023-10-31 23:33:18 25 4
gpt4 key购买 nike

我有一个 NodeJs 应用程序,它通过在 Redis 服务器上订阅来监听消息。它收集消息 5 秒,然后将它们推送到连接的客户端,代码如下所示:

io.sockets.on('connection', function (socket) {
nClients++;
console.log("Number of clients connected " + nClients);
socket.on('disconnect', function () {
nClients--;
console.log("Number of clients remaining " + nClients);
});
});

接收消息发送给客户端

cli_sub.on("message",function(channel,message) {
oo = JSON.parse(message);
ablv_last_message[oo[0]["base"]+"_"+oo[0]["alt"]] = message;
});

setInterval(function() {
Object.keys(ablv_last_message).forEach( function(key) {
io.sockets.emit('ablv', ablv_last_message[key]);
});
ablv_last_message = [];
}, 5000);

已找到解决方案(至少我是这么认为的):Node 没有崩溃是因为它达到了一些内部内存限制,看起来它崩溃是因为我的 VPS 内存不足,它是一个 2GB VPS 运行一个或两个其他过程也。将其升级到 4GB 后,Node 运行平稳,是的,总是在 1.6 到 2.0 GB 左右,但我相信是 GC 在这里完成它的工作。

最佳答案

最好尝试一些工具来查找 node.js 中的漏洞。

查找泄漏的工具

  • Jimb Esser 的 node-mtrace ,它使用用于分析堆使用情况的 GCC mtrace 实用程序。
  • 戴夫帕切科的 node-heap-dump获取 V8 堆的快照并将整个内容序列化到一个巨大的 JSON 文件中。它包括用于遍历和调查的工具生成的 JavaScript 快照。
  • 丹尼科茨的 v8-profilernode-inspector为 V8 分析器提供 Node 绑定(bind),并使用 WebKit Web Inspector 提供 Node 调试接口(interface)。
  • Felix Gnass 的 fork 与 un-disables the retainers graph 相同Felix Geisendörfer 的 Node Memory Leak Tutorial是对如何使用 v8-profiler 和 node-debugger 的简短而贴心的解释,是目前大多数 Node.js 内存泄漏调试的最新技术。
  • Joyent 的 SmartOS 平台,它为您提供了一系列工具供您使用 debugging Node.js memory leaks

来自 Tracking Down Memory Leaks in Node.js – A Node.JS Holiday Season .

还有一个blog

关于node.js - 存在内存泄漏的 NodeJS 应用程序,它在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com