2012-03-25 114 views
1

我正在運行一個需要很長時間的nodejs腳本。它運行一個非常長的循環並進行一些計算。最後它會顯示答案。答案可能不是42而是5位數字。我刪除了console.log消息,顯示它正在做什麼來使其運行得更快。如何窺探nodejs進程

我想知道它有多遠。有沒有什麼方法可以窺視這個過程,看看它在循環中有多遠,或者在任何變量中包含了什麼值?我不想中斷它,因爲我用time命令運行它來計算得到答案需要多長時間。

當它循環10億次時花了大約9分鐘。你認爲需要多長時間才能完成1萬億次循環?

+2

你到底在想什麼?如果花費9分鐘循環10億次,理論上需要150個小時循環一萬億次。 – 2012-03-25 20:14:42

+0

1萬億階乘的最後5位數。 – 2012-03-25 20:16:19

+0

我無法想象任何事情比'console.log'快。 – Domenic 2012-03-25 21:48:21

回答

0

嘗試查找節點檢查器並使用斷點。

1

創建自定義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到您的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' 
0

這個問題很古老,但我只是想添加一些東西。

首先,不推薦將Node.js用於這種CPU密集型任務。您應該使用更低級或編譯的語言,如C或Java。你會看到很多性能上的提升。

如果你反正在Node.js中執行它,也許你可以有條件地,即在每百萬左右這樣的情況下。

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