我在Node.js中有内存泄漏,我正在尝试找到它,但它目前部署到Heroku。我想现在有一些东西会在内存达到一定大小时重启过程(特别是因为我有几个dynos在运行)。
答案 0 :(得分:1)
默认情况下,Heroku会在超过内存限制时重新启动Dyno。这将自动发生,因此您不必担心它。
您可能想要尝试做的一件事就是帮助您在生产中调试它,但是使用NewRelic addon。
它们为您提供了一个很好的仪表板,您可以使用它来查看内存使用情况,查找瓶颈等。它非常有用,只需要一分钟即可完成设置(无需更改代码)。
答案 1 :(得分:1)
您可以使用节点应用程序指标(' appmetrics')模块执行此操作。
这提供了一个API来注册用于监视事件的回调,包括进程的内存使用和GC堆内存使用。
下面介绍如何为每个回调注册回调并设置阈值以对其执行操作:
var appmetrics = require('appmetrics');
var monitor = appmetrics.monitor();
var THRESHOLD = 100 * 1024 * 1024;
monitor.on('memory', function(memory) {
if (memory.physical > THRESHOLD) {
console.log('Process physical memory usage > ' + THRESHOLD);
}
});
monitor.on('gc', function(gc) {
if (gc.used > THRESHOLD) {
console.log('Garbage collected used heap > ' + THRESHOLD);
}
});
希望有所帮助!
答案 2 :(得分:0)
没有找到解决方案我创建了一个npm utli lib来做到这一点。请注意,它在Windows上不起作用。
它基于群集和状态npm libs。
答案 3 :(得分:0)
尝试以下操作以停止服务器(使用永久性的库来重启Restart Node.js server programmatically):
try {
if (postRequest.length % 5 == 0) {
const used = (process.memoryUsage().heapUsed / 1024 / 1024);
const mem = Math.round(used * 100) / 100;
if (mem >= 1024) {
//if(global.gc) global.gc();
process.exit();}
}
} catch (e) {
console.log("`Failed to exit`");
}