gpt4 book ai didi

javascript - 内存泄漏/简单回调在哪里?

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

我有简单的代码,但它有内存泄漏,我找不到。几分钟后,内存使用量从 75MB 增加到 180MB 并继续。在 Node v0.12.7 上运行

function tock() {
extractKeywords('2x Hannets® Akku 3500 mAh für Neato Modell 945-0005, 945-0006, XV Signature Pro, XV Signature, XV Essential, XV-12, XV-15, XV-11', function(err) {
if (err) {
console.log(err)
}

setImmediate(tock)
})
}

// run
tock();

function extractKeywords(title, cb) {
title = title.replace(/[^\w\-_]+/gi, ' ').replace(/\s+/gi, ' ')

redis.get('keywords_count', function(err, keywords) {
if(!err) {
lastKeywordCount = keywords = parseInt(keywords)
}

// var keywords = keyword_extractor.extract(title, {
// language:"german",
// remove_digits: true,
// return_changed_case: true,
// remove_duplicates: true
// })
var keywords = ['keyword1', 'keyword2', 'keyword3', 'keyword4', 'keyword5'].filter(function(keyword) {
if (keyword.length < 5)
return false
return true
}).map(function(k) {
return [lastKeywordCount, k]
}).reduce(function(a,b) {
return a.concat(b)
})

keywords.unshift('keywords')

cb()

// var keywords = ['keywords', 0, 'test', 1, 'test1', 1, 'test2', 1, 'test3', 1, 'test4']

// redis.ZADD(keywords, function(err, count){
// if (err){
// return cb(err)
// }

// redis.INCRBY('keywords_count', count, cb)
// })
})
}

我试过 node-inspector 但我无法弄清楚泄漏的来源。如果我删除 filter/map/reduce/unshift,泄漏似乎消失了或者只泄漏了更少的内存。

最佳答案

这实际上可能不是内存泄漏,有时很难用 Node 判断。 Node.js 使用 Google 的 V8 JavaScript 引擎,它实现了垃圾收集器。 V8 使用的 GC 算法将尝试占用尽可能多的内存,并且在清理未使用的内存时非常懒惰。因此,通常 Node 进程会继续增加内存使用量,直到 GC 认为最好释放内存的某个点。请注意,Node 进程的硬内存限制为 1.4 GB。

有一种方法可以强制 GC 释放内存,使用 --expose-gc 标志。像这样运行你的服务器:

node --expose-gc yourscript.js

并在应用程序开头的某处附加以下循环。这将强制每 30 秒进行一次垃圾收集。

setInterval(function(){
global.gc();
console.log('GC done')
}, 1000*30);

然后长时间运行您的代码。如果您的内存仍然随着时间的推移持续增加,那么很可能是合法的内存泄漏。

关于javascript - 内存泄漏/简单回调在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32334527/

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