Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点js cpu 100%_Node.js - Fatal编程技术网

Node.js 节点js cpu 100%

Node.js 节点js cpu 100%,node.js,Node.js,我们的节点应用程序每隔一段时间就会有一个环境在100%CPU上运行。服务器不是很活跃,通常在0%-2%的CPU上运行。 我想知道可能导致此问题的常见问题是什么,以及找出导致此问题的原因的最佳方法是什么 服务器规格: 节点版本0.8.14 ubuntu 11.10 英特尔(R)至强(R)CPU E5645@2.40GHz 使用的节点包: "express" : 2.5.x, "log" : "1.2.x", "redis" : "0.8.x", "socket.io" : "0.9.x", "mo

我们的节点应用程序每隔一段时间就会有一个环境在100%CPU上运行。服务器不是很活跃,通常在0%-2%的CPU上运行。 我想知道可能导致此问题的常见问题是什么,以及找出导致此问题的原因的最佳方法是什么

服务器规格:

节点版本0.8.14
ubuntu 11.10
英特尔(R)至强(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.x.x",
"passport-local" : "0.x.x",

您可以使用配置文件配置您的应用程序

  • 安装
    node tick
    by
    npm-g安装tick
  • 使用启用的概要文件
    节点运行应用程序--prof./app.js
  • CPU使用率达到100%一段时间后,停止应用程序
  • 您可以在应用程序目录中看到v8.log,现在您可以使用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();
    
    #/usr/bin/env节点
    require(_dirname+“/processor usage.js”).startWatching();
    var shouldRun=true;
    var desiredLoadFactor=.5;
    功能块cpufor(毫秒){
    var now=new Date().getTime();
    var结果=0
    while(应该运行){
    结果+=Math.random()*Math.random();
    如果(新日期().getTime()>now+ms)
    返回;
    }   
    }
    函数start(){
    shouldRun=true;
    块CPufor(1000*所需负载系数);
    setTimeout(开始,1000*(1-所需加载因子));
    }
    setInterval(函数(){
    log(“当前进程cpu使用率:+(global.processCpuUsage | | 0)+“%”;}
    , 1000);
    if(process.argv[2]){
    var值=parseFloat(process.argv[2]);
    如果(值<0 | |值>1){
    log(“请以[0..1]的范围给出所需的负载值”);
    进程。退出(-1);
    }否则{
    期望载荷系数=值;
    }
    }
    start();
    

    在2019年更新

    您最好使用内置的
    --prof进程
    来处理v8评测数据,生成的文件不再是v8.log,
    节点勾号处理器
    对您帮助不大,因此,要评测应用程序并读取v8评测数据,您可以按以下步骤进行:

    node --prof your_script.js
    
    节点将在当前目录中生成一个名称如下的文件
    isolate-0x103800000-v8.log
    ,现在您可以使用此文件生成分析报告

    node --prof-process isolate-0x103800000-v8.log > processed.txt
    

    如果您将UI应用程序与网页包一起使用,请注意
    查看选项
    查看
    对我来说,这可以解决问题

    watchOptions: {
       poll: false
    }
    

    以100%CPU持续运行是无限循环的典型特征。这在单线程NodeJ中是一个真正的问题,但不幸的是,缺少关于它的信息

    最终我发现了唯一有用的方法: 如何跟踪nodejs中的死循环:

    通过SSH连接到您的服务器。标识nodejs进程id(例如,设为4702)。 现在,让我们告诉进程侦听调试请求。 是的,我们正在使用一个叫做kill的命令。不,我们不会扼杀这个过程。我们发出了一个不同的信号

    kill -SIGUSR1 4702
    
    完成此操作后,进程将向调试器连接打开。事实上,它会在控制台日志中打印一个特殊的URL,您可以在Chrome中打开该URL来调试该过程!但是,也许您不想为了建立连接而在防火墙和容器配置上钻一个洞。是的,我也是。 因此,让我们在命令行进行调试:

    node inspect -p 4702
    
    您将看到以下提示:

    debug>
    
    然后键入:

    pause
    
    你回来了:

    break in file:///somewhere/something.js:555
    >555         for (prop in inputObject) {
    510             if (hasOwnProp(inputObject, prop)) {
    511                 normalizedProp = normalizeUnits(prop);
    
    对!!我们得到了第一个提示。应用程序正在执行文件something.js中的第555行。 这可能足以立即看到错误。但通常我们需要更多的信息。您可以键入backtrace以获得完整的堆栈跟踪:

    #0 someFunctionName file:///somewhere/somefile.js:444:22
    #1 someFunctionName file:///somewhere/somefile.js:555:33
    #2 someFunctionName file:///somewhere/somefile.js:666:44
    

    …等等。

    使用npm作为根(即sudo npm)时要小心。请阅读此处的讨论:哦,伙计,这帮助我发现我删除了一个模块,同时在服务中也需要它。很好。在现场脚本中查找问题!太棒了,谢谢你:D