2012-03-25 2 views
1

私は長い時間がかかるnodejsスクリプトを実行しています。それは非常に長いforループを実行し、いくつかの計算を行います。最後に答えが表示されます。答えはおそらく42ではなく5桁の数字です。より速く動かすために何をしているのかを表示するconsole.logメッセージを削除しました。nodejsプロセスをスパイする方法

私はそれがどれだけ得られたのだろうかと思っています。プロセスを覗き込んで、ループ内のどこまで、あるいはどの変数がどの変数に含まれているかを確認する方法はありますか?答えを得るまでにどれくらい時間がかかったかを計算するためにtimeコマンドで実行したので、中断する必要はありません。

10億回のループが完了するまでに約9分かかりました。 1兆回のループを完了するのにどれくらいの時間がかかると思いますか?

+2

あなたは何を計算しようとしていますか? 10億回ループするのに9分かかる場合、理論的に1兆回ループするのに150時間かかります。 –

+0

1兆の階乗の最後の5桁。 –

+0

私はあなたが 'console.log'よりも速いことは想像できません。 – Domenic

答えて

0

ノードインスペクタをルックアップし、ブレークポイントを使用してください。

1

カスタムreplを作成し、ノードプログラムからソケット経由で公開します。そして、あなたのプロセスにtelnetすることができます。そして、あなたは、どんなグローバル変数にもアクセスすることができます。例:

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であなたのノードプログラムと通信できます

$ 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

質問は非常に古いですが、私は何かを追加したいだけです。

まず、このようなCPU集中型タスクにNode.jsを使用することはお勧めしません。 CやJavaのようなより低レベルの、あるいはコンパイルされた言語を使うべきです。あなたは多くのパフォーマンスの向上が見られます。

Node.jsでこれを行う場合は、条件付きでconsole.log、つまりこのように100万回ごとに実行することができます。

if (counter % 1000000 == 0) { 
    console.log('Progress: ' + counter); 
} 
関連する問題