使用cluster.fork()调试Node.js进程 [英] Debugging Node.js processes with cluster.fork()

查看:735
本文介绍了使用cluster.fork()调试Node.js进程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些代码看起来非常像集群文档中的示例,请参见 http:/ /nodejs.org/docs/v0.6.0/api/cluster.html ,以:

  var cluster = require('cluster'); 
var server = require('./ mycustomserver');
var numCPUs = require('os')。cpus()。length;

if(cluster.isMaster){
var i;
//主进程
(i = 0; i< numCPUs; i ++){
cluster.fork();
}
cluster.on('death',function(worker){
console.log('Worker'+ worker.pid +'death');
});
} else {
//工作进程
server.createServer({port:80},function(err,result){
if(err){
throw错误;
} else {
console.log('线程侦听端口'+ result.port);
}
});
}

我已经安装了node-inspector,并尝试使用它和Eclipse V8插件详见 https://github.com/joyent/node/wiki/Using -Eclipse-as-Node-Applications-Debugger 来调试我的应用程序,但是看起来我无法挂接一个调试器,使得分叉的集群实例在有趣的服务器逻辑上放置断点 - 我只能调试产生集群过程的应用程序的一部分。有没有人知道我是否可以做这样的事情,还是要在我的应用程序中重构我的应用程序,以便在调试模式下只使用一个线程?



I '是一个Node.js的新手,所以我希望有一些明显的东西我在这里缺少。

解决方案

  var fixedExecArgv = []; 
fixedExecArgv.push(' - debug-brk = 5859');
cluster.setupMaster({
execArgv:fixedExecArgv
});

信用转到谢尔盖的帖子



我更改了我的 server.js 仅叉一个工作人员主要用于测试,然后添加上面的代码。这固定了我的调试问题。谢谢谢尔盖解释并提供解决方案!!!


I've got some code that looks very much like the sample in the Cluster documentation at http://nodejs.org/docs/v0.6.0/api/cluster.html, to wit:

var cluster = require('cluster');
var server = require('./mycustomserver');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  var i;
  // Master process
  for (i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  cluster.on('death', function (worker) {
    console.log('Worker ' + worker.pid + ' died');
  });
} else {
  // Worker process
  server.createServer({port: 80}, function(err, result) {
    if (err) {
      throw err;
    } else {
      console.log('Thread listening on port ' + result.port);
    }
  });
}

I've installed node-inspector and tried using both it and the Eclipse V8 plugin detailed at https://github.com/joyent/node/wiki/Using-Eclipse-as-Node-Applications-Debugger to debug my application, but it looks like I can't hook a debugger up to forked cluster instances to put breakpoints at the interesting server logic--I can only debug the part of the application that spawns the cluster processes. Does anybody know if I can in fact do such a thing, or am I going to have to refactor my application to use only a single thread when in debugging mode?

I'm a Node.js newbie, so I'm hoping there's something obvious I'm missing here.

解决方案

var fixedExecArgv=[];
fixedExecArgv.push('--debug-brk=5859');
cluster.setupMaster({ 
  execArgv: fixedExecArgv 
});

Credit goes to Sergey's post.

I changed my server.js to fork only one worker mainly for testing this then added the code above the forking. This fixed the debugging issue for me. Thank you Sergey for explaining and providing the solution!!!

这篇关于使用cluster.fork()调试Node.js进程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆