节点js cpu 100%
我们遇到了一个问题,那就是每隔一段时间我们的一个环境节点应用就运行在100%的CPU上。 服务器不是非常活跃,通常运行在0%-2%的CPU上。 我想知道什么是可能导致这个问题的常见问题,什么是最好的方法来找出是什么原因造成这个问题。
服务器规格:
节点版本0.8.14
Ubuntu 11.10
Intel(R)Xeon(R)CPU E5645 @ 2.40GHz
使用的节点包:
"express" : 2.5.x, "log" : "1.2.x", "redis" : "0.8.x", "socket.io" : "0.9.x", "mongodb": ">= 0.9.6-7", "passport" : "0.xx", "passport-local" : "0.xx",
您可以使用node-tick来分析您的应用程序。
- 通过
sudo npm -g install tick
安装node-tick
sudo npm -g install tick
- 使用已启用的configuration文件
node --prof ./app.js
运行您的应用程序 - 经过一段时间CPU 100%的使用停止你的应用程序
- 你可以在你的app目录中看到v8.log,现在你可以用node-tick-processor来读取它
- 运行
node-tick-processor
并解释结果
这是我发现:
#!/usr/bin/env node require(__dirname+"/processor-usage.js").startWatching(); var shouldRun = true; var desiredLoadFactor = .5; function blockCpuFor(ms) { var now = new Date().getTime(); var result = 0 while(shouldRun) { result += Math.random() * Math.random(); if (new Date().getTime() > now +ms) return; } } function start() { shouldRun = true; blockCpuFor(1000*desiredLoadFactor); setTimeout(start, 1000* (1 - desiredLoadFactor)); } setInterval(function() { console.log("current process cpu usage: "+(global.processCpuUsage || 0)+"%");} , 1000); if (process.argv[2]) { var value = parseFloat(process.argv[2]); if (value < 0 || value > 1) { console.log("please give desired load value as a range [0..1]"); process.exit(-1); } else { desiredLoadFactor = value; } } start();
在http://blackholethought.blogspot.de/2012/08/measuring-cpu-usage-of-nodejs-from.html上