【发布时间】:2021-03-29 11:22:54
【问题描述】:
我已连接到 p2p 网络,每隔几秒就会收到一条消息。消息的大小可以是 10 个字符,但也可以是 5 MB。我需要通过将收到的所有消息写入文件系统来记录它们。目前我正在使用 fs.writeFileSync() 但不幸的是,我的应用程序运行的时间越长,内存就会增加:
在这种情况下,我的应用程序运行了 15 个小时并且已经使用了 3.7Gi。我用来写日志的函数如下:
let counter = 0
class Message {
constructor(data) {
this.msgId = data.readInt32LE()
const length = data.readInt32LE()
// this.data = JSON.parse(data.read(<length>))
}
// some other methods
save() {
if (!fs.existsSync(`/data/${this.msgId}`)) {
const data = Object.assign(this.data, {
index: counter++
})
console.log(counter)
fs.writeFileSync(`/data/${this.msgId}`, JSON.stringify(data))
}
}
}
每当我通过 p2p 收到消息时,我都会读取 msgId 以及它包含在构造函数中的数据。在对“消息”对象进行了一些其他业务逻辑之后,我终于调用了 save() 函数。 “内存泄漏”肯定在 save() 函数内部,因为当我将 save() 函数留空时,我的应用程序会运行数天而不会消耗超过 200MB 的内存。那么有谁知道 fs.writeFilesync() 是否存在潜在的内存泄漏或可能导致内存泄漏的原因?
【问题讨论】:
-
这里有些问题 - 您实际上是否将
data(它是一个对象)传递给 fs.writeFileSync? -
是的,对不起...在 save() 函数之前调用了另一个函数(我删除以缩小摘录)。它正在执行一些业务逻辑,最后执行 this.data = JSON.stringify(this.data)。我修复了上面缺少的 JSON.stringify() ......
标签: node.js memory-leaks