Как шпионить за процессом nodejs - PullRequest
1 голос
/ 26 марта 2012

Я запускаю скрипт nodejs, который занимает много времени. Он работает очень долго для цикла и делает некоторые вычисления. В конце отобразится ответ. Ответ, вероятно, не 42, а 5-значный номер. Я удалил сообщения console.log, в которых указано, что он делает, чтобы он работал быстрее.

Мне интересно, как далеко это зашло. Есть ли способ заглянуть в процесс и посмотреть, как далеко он находится в цикле, или какие значения содержатся в любой из переменных? Я не хочу прерывать его, потому что я запустил его с помощью команды времени, чтобы вычислить, сколько времени понадобилось, чтобы получить ответ.

Потребовалось около 9 минут, чтобы завершить цикл 1 миллиард раз. Как вы думаете, сколько времени потребуется, чтобы закончить цикл 1 триллион раз?

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Создайте пользовательский repl и выставьте его через сокет из вашей программы узла. Затем вы можете подключиться к своему процессу через telnet, и у вас будет доступ ко всем глобальным переменным, а также к любым, которые вы выставляете в контексте 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 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'
0 голосов
/ 22 января 2014

Вопрос очень старый, но я просто хочу кое-что добавить.

Во-первых, использование Node.js для такой задачи, интенсивно использующей процессор, не рекомендуется.Вы должны использовать более низкоуровневый или скомпилированный язык, такой как C или Java.Вы увидите огромное улучшение производительности.

Если вы все равно сделаете это в Node.js, возможно, вы сможете console.log условно, то есть после каждого миллиона или около того, как это.

if (counter % 1000000 == 0) {
    console.log('Progress: ' + counter);
}
0 голосов
/ 26 марта 2012

Попробуйте поискать узел-инспектор и используйте точку останова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...