如何监视nodejs进程

时间:2012-03-25 20:05:09

标签: javascript node.js process

我正在运行一个需要很长时间的nodejs脚本。它运行一个非常长的for循环并进行一些计算。最后它将显示答案。答案可能不是42而是5位数。我删除了console.log消息,显示它正在做什么以使其运行得更快。

我想知道它到底有多远。有没有办法窥视这个过程,看看它在循环中有多远,或者任何变量中包含哪些值?我不想打断它,因为我用time命令运行它来计算得到答案需要多长时间。

它完成了大约9分钟,当它循环10亿次。您认为完成循环1万亿次需要多长时间?

3 个答案:

答案 0 :(得分:1)

创建自定义repl并通过节点程序中的套接字公开它。然后,您可以远程访问您的进程,您将可以访问任何全局变量以及您向repl上下文公开的任何变量。例如:

var net = require("net")
  , repl = require("repl");

var counterOfInterest = 0;
setInterval(function() { counterOfInterest++; }, 1000);
function whatsTheStatus() { 
  return 'process has counted ' + counterOfInterest + ' times'
};

net.createServer(function (socket) {
  var remote = repl.start("remote ➜  ", socket);
  remote.context.whatsTheStatus = whatsTheStatus;
}).listen(8888);

然后,您可以telnet到您的repl并与您的节点程序进行交互!

$ telnet 127.0.01  8888
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
remote ➜  whatsTheStatus()
'process has counted 9 times'
remote ➜  whatsTheStatus()
'process hascounted 12 times'

答案 1 :(得分:0)

尝试查找node-inspector并使用断点。

答案 2 :(得分:0)

问题很陈旧,但我只是想补充一点。

首先,不建议将Node.js用于此类CPU密集型任务。您应该使用更低级或编译的语言,如C或Java。你会看到很多表现都有所改善。

如果你仍然在Node.js中这样做,你可以有条件地console.log,即每隔一百万左右,就像这样。

if (counter % 1000000 == 0) {
    console.log('Progress: ' + counter);
}