我的项目中就发现有内存泄露,
于是我用generator-express 生成了一个express 框架, 然后用 pm2 运行来检测内存。
首页路由
app.get('/',function(req,res){
res.send('ok');
});
发现每次刷新首页的时候,内存就会涨 1m左右,并且不会降,然道是中间件产生了内存泄露了吗?
不知道大家有没遇到!! 希望大家一起探讨解答。
38 回复
@struCoder app.use(express.static(path.join(__dirname, 'public'), {maxAge: 31536000}));
意思是这行的代码的原因?
找到一个临时解决方案 在启动的时候加上 --max-old-space-size=MEM
例:node --max-old-space-size=256 app.js
这样内存增长到230+的时候 就不再增长
每10s回收一次
setInterval(function(){ console.log( ‘NOW gc …’ ); global.gc(); }, 10000);
启动时要加上v8的expose_gc参数。
node --expose_gc app.js
V8回收机制,不是对象过了其作用域就回收,而是要等到进程占用的内存资源达到某个上限才开始,垃圾回收时会导致任何脚本的挂起,因此,请不要手动gc()
,内存泄漏什么的,赞成 @tulayang 的说法,没有因为OOM导致服务宕掉都别管它,性能测试组提交问题了再说,实在找不到来不及改,在不是很频繁发生的情况下,自杀重启也不错。