节点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来分析您的应用程序。

  1. 通过sudo npm -g install tick安装node-tick sudo npm -g install tick
  2. 使用已启用的configuration文件node --prof ./app.js运行您的应用程序
  3. 经过一段时间CPU 100%的使用停止你的应用程序
  4. 你可以在你的app目录中看到v8.log,现在你可以用node-tick-processor来读取它
  5. 运行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&#x4E0A;