node.js杀死僵尸进程

var cluster = require ( 'cluster' );
var http = require ( 'http' );
var numCPUs = require ( 'os' ). cpus (). length ;
var rssWarn = ( 50 * 1024 * 1024 ),
heapWarn = ( 50 * 1024 * 1024 );

var workers = {};
if ( cluster . isMaster ) {
for ( var i = 0 ; i < numCPUs; i ++ ) {
createWorker ();
};
setInterval ( function () {
var time = new Date (). getTime ()
for (pid in workers) {
if ( workers . hasOwnProperty (pid) &&
workers[pid]. lastCb + 5000 < time) {
console . log ( 'Long running worker ' + pid + ' killed' )
workers[pid]. worker . kill ()
delete workers[pid]
createWorker ();
}
}
}, 1000 )
} else {
// 服务器
http . Server ( function ( req , res ) {
// 打乱 200 个请求中的 1 个
if ( Math . floor ( Math . random () * 200 ) === 4 ) {
console . log ( 'Stopped ' + process . pid + ' from ever finishing' )
while ( true ) { continue }
}
res . writeHead ( 200 );
res . end ( 'hello world from ' + process . pid + '\n' )
}). listen ( 8000 )
// 每秒钟报告一次状态
setInterval ( function report () {
process . send ({
cmd : "reportMem" ,
memory : process . memoryUsage (),
process : process . pid
})
}, 1000 )
};

function createWorker () {
var worker = cluster . fork ()
console . log ( 'Created worker: ' + worker . pid )
// 允许开机时间
workers[ worker . pid ] = { worker : worker, lastCb : new Date (). getTime () - 1000 }
worker . on ( 'message' , function ( m ) {
if ( m . cmd === "reportMem" ) {
workers[ m . process ]. lastCb = new Date (). getTime ()
if ( m . memory . rss > rssWarn) {
console . log ( 'Worker ' + m . process + ' using too much memory.' )
}
}
})
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值