【问题标题】:Node.js Cluster - detect worker stuck?Node.js 集群 - 检测工作人员卡住了吗?
【发布时间】:2014-07-15 09:29:39
【问题描述】:

我在集群中使用 node.js,通常有 2 个 cpu,可以转换为一个 master 和两个 worker。 我有一个鬼鬼祟祟的问题,偶尔(很少),一名工人被“卡住” 出于某种原因,另一个承担了所有的负载。 我不确定原因,仍在调查(没有内存泄漏,没有堆栈溢出,没有异常)。

在 linux 上使用 top bash 命令查看进程时,我可以清楚地看到其中一个节点进程稳定在 100% cpu 负载。

今天我想问你们,你们是否知道一种方法来检测这种情况(当一名工人处于 100% 时),以便我可以将其杀死。

【问题讨论】:

    标签: linux node.js cluster-computing


    【解决方案1】:

    好的, 所以这里。 原来我的工人完全被卡住了。不知道为什么,但可能是集群问题(你所说的集群%^&$) 无论如何,我不得不由主人监视工人。 我所做的是使用 cron 每分钟从每个工人向主人报告,如下所示:

    process.send({id:cluster.worker.id})

    master 将收到该消息并知道该 worker 还活着。 然后,master 会记录缺少的 worker 响应。 5分钟后,如果计数达到0,则worker被杀死(每分钟递减一次)

    这就是我在几分钟后实现(我自己的)目标的方法,即杀死一个卡住的工人。 这不是一个完整的解决方案,我仍然不知道是什么原因导致工人毫无例外地陷入困境。 但这就是现在的生活。

    【讨论】:

      【解决方案2】:

      查看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)
      

      【讨论】:

      • 实际上这不起作用,因为这依赖于工人进行报告。在我的情况下发生的事情是工人完全陷入困境并停止报告。我正在添加我恢复到的答案作为答案
      • 实际上,我有一个类似的 Postgresql 模块案例,它的客户端用完了,清理它们还不够,我实现了一个类似的解决方案。在我回复之后,我还注意到 result.cpu 在 Mac OSX 上无法正常工作。你是在 Mac 还是 Linux 上测试它?我很好奇逻辑是否由于 Mac 而无法正常工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多