node内存泄露分析 ._pendingList Array
问题描述
使用egg构建的node应用,node端作为中间服务器,提供服务端渲染,也向服务端请求数据,部署到服务器后,出现内存连续增长的问题,怀疑是内存泄露。
问题出现的环境背景及自己尝试过哪些方法
移除了相关定时器,未解决;
使用alinode监控,取到的堆快照,如下图:
可以确定主要点在getAllFrontCateInfo这个接口上。
该接口每次都返回一个string的json对象(其实也不是很大),商量后用服务端最后更新时间来判断是否返回新的类目数据,否则使用缓存在node的数据,重新上线后,内存增长速度放慢了很多,但仍旧在上涨。隔段时间再次抓去堆快照,如下图:
仍然是 ._pendingList Array 和 Request 占据大头,请教是否是请求队列引起的,如果是,需要怎么解决呢
相关代码
// 发起一个请求,是这样的, 用的是[natty-fetch](https://github.com/jias/natty-fetch)
/**
* @description 从缓存(配置中心)中获取所有可展示前台类目的信息
* @param {Object} param { timestamp: string }
* @return {Object} result 接口010206
*/
async getAllFrontCateInfo(param) {
try {
const resp = await fetch.mtop.cat.getAllFrontCateInfo(param);
return resp;
} catch (error) {
this.ctx.logger.error(error);
this.ctx.redirect('/error');
}
}
// controller里面发起请求
// tsp: 时间戳, 获取前台类目的参数,后端根据这个时间戳和类目最后修改的时间进行比较决定是否返回类目数据
let tsp = '0';
let allFrontCateInfo = [];
class HomeController extends Controller {
async index() {
const { ctx, config } = this;
const timestamp = String(new Date().getTime());
const preTimestamp = String(new Date().getTime());
let data = await Promise.all([
ctx.service.home.getAllFrontCateInfo({ data: { timestamp: tsp } }),
ctx.service.home.***1(),
ctx.service.home.***2(),
ctx.service.home.***3(),
ctx.service.home.***4(),
]);
if (data[0]) {
tsp = data[0].timestamp || 0;
allFrontCateInfo = data[0].parentCates.slice(0, 11) || [];
}
ctx.body = await ctx.renderView('home', {
pageletProps: {
home: {
allFrontCateInfo,
...
},
},
});
data[0] = null;
data = null;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
很明显你使用的
package
本身就有问题或者不是在这种应用场景上使用。(事实上从项目的简介来看,引用场景就很不一样,怎么看都是一个运行在浏览器的项目)_pendingList
没有长度限制,还没成功或失败不释放,也就是为什么你上面有那么多请求在_pendingList
上。storage
存储在_pendingList
的每个request
上,这就是为什么那么大。natty-fetch/blob/master/src/fetch.js#L141
natty-fetch/blob/master/src/request.js#L16
给的提示代码太少了,比如重要的 _pendingListArray 数组在哪里定义,以及在哪里会 push Request 对象操作的代码都没有,最好加下 alinode 的官方客户钉钉群吧:11794270,可以提供一些技术支持,或者项目邀请下 1012608394995121