84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
我写了一个Node.js应用(TCP网络服务,不是网站),CPU占用达到类似功能C语言程序的十多倍。
有什么工具可以看到CPU都消耗在什么地方呢?比如说,每个函数调用了多少次、花费多长时间,有多少setTimeout和setInterval等待运行。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
经过仔细检查,发现是程序内有死循环。调试的方法就是简单的插入console.log。
console.log
// private method entry_expiry Cache.prototype.entry_expiry = function Cache_entry_expiry(key) { var now = Date.now(); var entry = this.T[key]; if (now >= entry._expiry) { delete this.T[key]; } else { setTimeout(this.entry_expiry.bind(this, key), entry._expiry - now); } };
其中的var now = Date.now();之前不慎写成var now = Date.now;。Date.now转换成数字是NaN,造成now >= entry._expiry永远是false。 而setTimeout(fn,NaN)等同于setTimeout(fn,0),导致程序死循环。
var now = Date.now();
var now = Date.now;
Date.now
NaN
now >= entry._expiry
false
setTimeout(fn,NaN)
setTimeout(fn,0)
pm2 可以满足到文件.. https://github.com/Unitech/pm2
至于要到函数的话,就要用的V8Profiler 了,不过这个有点难用...
http://code.google.com/p/v8/wiki/V8Profiler
参考一下这个吧... https://github.com/cnodejs/nodeclub/wiki/入门知识概览
经过仔细检查,发现是程序内有死循环。调试的方法就是简单的插入
console.log
。其中的
var now = Date.now();
之前不慎写成var now = Date.now;
。Date.now
转换成数字是NaN
,造成now >= entry._expiry
永远是false
。而
setTimeout(fn,NaN)
等同于setTimeout(fn,0)
,导致程序死循环。pm2 可以满足到文件.. https://github.com/Unitech/pm2
至于要到函数的话,就要用的V8Profiler 了,不过这个有点难用...
http://code.google.com/p/v8/wiki/V8Profiler
参考一下这个吧... https://github.com/cnodejs/nodeclub/wiki/入门知识概览