问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么自己检查NodeJS的代码是否存在内存泄漏

发布网友 发布时间:2022-04-26 17:58

我来回答

2个回答

热心网友 时间:2022-04-23 00:41

首先,我们来看一个简单的内存泄漏
var http = require('http');

var server = http.createServer(function (req, res) {
for (var i=0; i<1000; i++) {
server.on('request', function leakyfunc() {});
}

res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
server.setMaxListeners(0);
console.log('Server running at http://127.0.0.1:1337/. Process PID: ', process.pid);

每一个请求我们增加了1000个导致泄漏的*。如果我们在一个shell控制台中执行以下命令:
while true; do curl "http://127.0.0.1:1337/"; done

然后在另外一个shell控制台中查看我们的进程
top -pid

我们会看到node进程产生异常高的内存占用,我们的node进程看起来失控了。那么,当我们的node进程出现这种情况的时候,通常我们该怎样诊断出问题的根源?
内存泄露的检测
npm模块 memwatch 是一个非常好的内存泄漏检查工具,让我们先将这个模块安装到我们的app中去,执行以下命令:
npm install --save memwatch

然后,在我们的代码中,添加:
var memwatch = require('memwatch');
//memwatch.setup(); 原文有这行代码,最新版本的memwatch已去掉这个方法(译者注)

然后监听 leak 事件
memwatch.on('leak', function(info) {
console.error('Memory leak detected: ', info);
});

这样当我们执行我们的测试代码,我们会看到下面的信息:
{
start: Fri Jan 02 2015 10:38:49 GMT+0000 (GMT),
end: Fri Jan 02 2015 10:38:50 GMT+0000 (GMT),
growth: 7620560,
reason: 'heap growth over 5 consecutive GCs (1s) - -2147483648 bytes/hr'
}

参考文献https://w3ctech.com/topic/842#rd?sukey=1a2e6cf0ed628693963c7d024fae83cd29147e987cc93e20f3292fef404a2fc91774fa0e1af5eeb690c5521ad1e164fb

热心网友 时间:2022-04-23 01:59

首先,我们来看一个简单的内存泄漏
var http = require('http');
var server = http.createServer(function (req, res) {
for (var i=0; i<1000; i++) {
server.on('request', function leakyfunc() {});
}
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
server.setMaxListeners(0);
console.log('Server running at http://127.0.0.1:1337/. Process PID: ', process.pid);
每一个请求我们增加了1000个导致泄漏的*。如果我们在一个shell控制台中执行以下命令:
while true; do curl "http://127.0.0.1:1337/"; done
然后在另外一个shell控制台中查看我们的进程
top -pid
我们会看到node进程产生异常高的内存占用,我们的node进程看起来失控了。那么,当我们的node进程出现这种情况的时候,通常我们该怎样诊断出问题的根源?
内存泄露的检测
npm模块 memwatch 是一个非常好的内存泄漏检查工具,让我们先将这个模块安装到我们的app中去,执行以下命令:
npm install --save memwatch
然后,在我们的代码中,添加:
var memwatch = require('memwatch');
//memwatch.setup(); 原文有这行代码,最新版本的memwatch已去掉这个方法(译者注)
然后监听 leak 事件
memwatch.on('leak', function(info) {
console.error('Memory leak detected: ', info);
});
这样当我们执行我们的测试代码,我们会看到下面的信息:
{
start: Fri Jan 02 2015 10:38:49 GMT+0000 (GMT),
end: Fri Jan 02 2015 10:38:50 GMT+0000 (GMT),
growth: 7620560,
reason: 'heap growth over 5 consecutive GCs (1s) - -2147483648 bytes/hr'
}
参考文献https://w3ctech.com/topic/842#rd?sukey=1a2e6cf0ed628693963c7d024fae83cd29147e987cc93e20f3292fef404a2fc91774fa0e1af5eeb690c5521ad1e164fb
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 为什么戴耳钉戴的耳朵疼呢 如何在Node.js中检测内存泄漏 Node.js node 出现内存溢出,有什么好的 解决办法 如何自己检查NodeJS的代码是否存在内存泄漏 nodejs怎么监听内存回 nodejs内存如果管理,为什么会急剧上升 线上前端nodejs应用内存飙高,请问怎么处理 如何限制nodejs虚拟内存占用大小 nodejs占用内存太多怎么解决? 怎样使用Nodejs内存治理 如何让苹果手机不更新系统 苹果手机系统升级怎么永久关闭 右边漫画中这位中学生的言行给我们什么启示【母亲节】 母亲是我们人生中的第一位老师,她辛辛苦苦地抚养我们长大,默默地奉献着无私的爱,温暖着我们的心,教我 我要一副关于我和妈妈的漫画,并配上文字(是作文)500字。 上海妈妈用漫画记录儿子成长瞬间,你在何时感受到了妈妈对自己无言的爱? 关于母亲的动漫 氯化铝是由什么构成?? 华为光伏逆变器自动运行和停机功能及最大功率跟踪? 机房运维监控系统如何监控华为网络设备? 刚刚才知道,为什么我的耳朵带耳钉会那么痛 为什么戴耳钉戴的耳朵疼 为什么带耳钉耳朵会疼,会肿,有什么方法可以不疼,不肿吗? 带耳钉耳朵又疼又痒,是怎么回事 淘宝后台没有显示卡包!怎样开通卡包? 耳朵戴耳环又痒又痛是怎么回事 淘宝卡包在哪里 为什么带耳钉睡觉耳朵疼,昨天给耳朵消毒来着。。。 淘宝礼品卡在哪里 只要一戴耳环里面就痛是怎么回事 戴耳环耳朵疼怎么办? 为什么我的耳朵带上耳环就会痛 淘宝PC客户端在哪有下载的,我在网上怎么找不到啊! 我这几天带耳钉(纯银的),为什么耳朵会疼呢? 戴金耳钉为什么会疼 带耳钉耳朵疼痒怎么办? 淘宝或者支付宝里不是有个酒店会员卡界面吗?在哪儿?我找不到 淘宝我的优惠信息在哪里 淘宝里面的刮刮卡在哪里面!求帮助 中俄两国联手真的能打败美国吗?