Linux Node.js群集-是否检测工作进程被卡住?
我将node.js与集群一起使用,通常使用两个cpu,转换为一个主节点和两个工作节点。 我遇到了一个棘手的问题,偶尔会有一个工人“卡住” 由于某种原因,而另一个承担了所有的负担。 我不确定原因,仍然在调查没有内存泄漏,没有堆栈溢出,没有异常 在linux上查看使用top bash命令的进程时,我可以清楚地看到其中一个节点进程在100%的cpu负载下是稳定的 我今天想问你们的是,你们是否知道一种方法,当一个工人100%工作时,检测这种情况,这样我就可以把它干掉。查看软件包。 这样的办法应该行得通。我跳过了群集和工作程序设置Linux Node.js群集-是否检测工作进程被卡住?,linux,node.js,cluster-computing,Linux,Node.js,Cluster Computing,我将node.js与集群一起使用,通常使用两个cpu,转换为一个主节点和两个工作节点。 我遇到了一个棘手的问题,偶尔会有一个工人“卡住” 由于某种原因,而另一个承担了所有的负担。 我不确定原因,仍然在调查没有内存泄漏,没有堆栈溢出,没有异常 在linux上查看使用top bash命令的进程时,我可以清楚地看到其中一个节点进程在100%的cpu负载下是稳定的 我今天想问你们的是,你们是否知道一种方法,当一个工人100%工作时,检测这种情况,这样我就可以把它干掉。查看软件包。 这样的办法应该行得通。
var usage = require('usage');
setInterval(function() {
usage.lookup(worker.process.pid, function(err, result) {
console.log(result);
if(result.cpu > 90){
worker.kill();
}
});
}, 5000)
嗯,
这就来了。
结果我的工人被卡住了。不知道为什么,但这可能是一个群集问题,您称之为群集%^&$
不管怎样,我必须由船长监督工人。
我所做的是使用cron每分钟从每个工作人员向主机报告,如下所示:
process.send{id:cluster.worker.id}
大师会收到这个信息,并且知道这个工人还活着,身体健康。
然后,主服务器记录缺少的工作响应。5分钟后,如果计数达到0(每分钟递减一次),则工作进程将被杀死
这就是我如何实现自己的目标,在几分钟后杀死一名卡住的工人。
这不是一个完整的解决方案,我仍然不知道是什么原因导致工人毫无例外地陷入困境。
但这就是现在的生活。实际上,这不起作用,因为这依赖于工作人员来做报告。在我的案例中,工人完全陷入困境,停止报告。我添加了一个我回复到的答案,实际上,我在Postgresql模块中遇到了一个类似的情况,它的客户端已经用完,清理它们还不够,我实现了一个类似的解决方案。在我做出回应后,我还注意到result.cpu在Mac OSX上无法正常工作。你是在Mac还是Linux上测试它?我很好奇,是不是因为Mac的缘故,逻辑不起作用了。