我正在運行一個需要很長時間的nodejs腳本。它運行一個非常長的循環並進行一些計算。最後它會顯示答案。答案可能不是42而是5位數字。我刪除了console.log消息,顯示它正在做什麼來使其運行得更快。如何窺探nodejs進程
我想知道它有多遠。有沒有什麼方法可以窺視這個過程,看看它在循環中有多遠,或者在任何變量中包含了什麼值?我不想中斷它,因爲我用time命令運行它來計算得到答案需要多長時間。
當它循環10億次時花了大約9分鐘。你認爲需要多長時間才能完成1萬億次循環?
我正在運行一個需要很長時間的nodejs腳本。它運行一個非常長的循環並進行一些計算。最後它會顯示答案。答案可能不是42而是5位數字。我刪除了console.log消息,顯示它正在做什麼來使其運行得更快。如何窺探nodejs進程
我想知道它有多遠。有沒有什麼方法可以窺視這個過程,看看它在循環中有多遠,或者在任何變量中包含了什麼值?我不想中斷它,因爲我用time命令運行它來計算得到答案需要多長時間。
當它循環10億次時花了大約9分鐘。你認爲需要多長時間才能完成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'
這個問題很古老,但我只是想添加一些東西。
首先,不推薦將Node.js用於這種CPU密集型任務。您應該使用更低級或編譯的語言,如C或Java。你會看到很多性能上的提升。
如果你反正在Node.js中執行它,也許你可以有條件地,即在每百萬左右這樣的情況下。
if (counter % 1000000 == 0) {
console.log('Progress: ' + counter);
}
你到底在想什麼?如果花費9分鐘循環10億次,理論上需要150個小時循環一萬億次。 – 2012-03-25 20:14:42
1萬億階乘的最後5位數。 – 2012-03-25 20:16:19
我無法想象任何事情比'console.log'快。 – Domenic 2012-03-25 21:48:21