我正在使用带有集群的node.js,通常有2个cpu,它们转换为一个master和两个worker。 我有一个鬼鬼祟祟的问题,偶尔(非常罕见),其中一名工人被“卡住” 由于某种原因,另一个负担所有负载。 我不确定原因并且仍在调查(没有内存泄漏,没有堆栈溢出,也没有例外)。
在Linux上使用top bash命令查看进程时,我可以清楚地看到其中一个节点进程在100%cpu负载下稳定。
今天我想问你们的是,你是否知道一种检测这种情况的方法(当一名工人达到100%时),所以我可以将其杀掉。
答案 0 :(得分:0)
查看usage包。 这样的事情应该有效。我跳过了群集和工作人员设置。
var usage = require('usage');
setInterval(function() {
usage.lookup(worker.process.pid, function(err, result) {
console.log(result);
if(result.cpu > 90){
worker.kill();
}
});
}, 5000)
答案 1 :(得分:0)
行, 所以这里。 事实证明我的工作人员完全陷入困境。不知道为什么,但它可能是一个集群问题(你称之为集群%^& $) 无论如何,我不得不由主人监督工人。 我所做的是使用cron每分钟向主人报告一次,如下:
process.send({ID:cluster.worker.id})
主人会收到这条消息,并知道这名工人还活着。 然后,主人保留失踪工人响应的计数。 5分钟后,如果计数达到0(每分钟减少一次),工人就会被杀死
这就是我实现(我自己)几分钟后杀死陷入困境的工人的目标。 这不是一个完整的解决方案,我仍然不知道是什么原因导致工人被卡住而没有任何例外。 但现在就是生活。