Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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

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
Javascript 使用100%CPU的Node JS应用程序_Javascript_Node.js_Amazon Ec2 - Fatal编程技术网

Javascript 使用100%CPU的Node JS应用程序

Javascript 使用100%CPU的Node JS应用程序,javascript,node.js,amazon-ec2,Javascript,Node.js,Amazon Ec2,我们正在Node.JS中为iPhone应用程序制作一个后端应用程序。 我们在EC2实例t2.medium上部署了后端应用程序节点,该实例使用安装在另一个EC2实例t2.small上的MySQL服务器。在进行负载测试时,我们看到CPU使用率为100%。我们试图找出原因,但到目前为止还没有找到 我们在server.js中使用以下模块 var express = require('express'); var session = require('express-session');

我们正在Node.JS中为iPhone应用程序制作一个后端应用程序。 我们在EC2实例t2.medium上部署了后端应用程序节点,该实例使用安装在另一个EC2实例t2.small上的MySQL服务器。在进行负载测试时,我们看到CPU使用率为100%。我们试图找出原因,但到目前为止还没有找到

我们在server.js中使用以下模块

    var express = require('express');
    var session = require('express-session');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    var log = require('./utils/logger');
    var userRequestHandler = require("./requestHandlers/userRequestHandler");
    var authenticationHandler = require("./requestHandlers/authenticationHandler");
    var verificationHandler = require("./twilioVerification/verificationHandler");
    var eventRequestHandler = require("./requestHandlers/eventRequestHandler");
    var urls = require('config').get('urls');
    var sessionParameters = require('config').get('sessionParameters');
    var app = express();
我们正在使用JMeter进行负载测试。使用JMeter,我们可以使用单个实例运行450个请求,或者使用3个实例运行150个请求。如果我们尝试使用超过450个,我们会在JMeter中得到以下错误

   java.net.SocketException: Connection reset
     at java.net.SocketInputStream.read(Unknown Source)
     at java.net.SocketInputStream.read(Unknown Source)
     at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
     at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
     at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
     at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
     at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:61)
     at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
     at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
     at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
     at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
在450个或更少请求的情况下,我们的CPU使用率达到100%。我们对NodeJS还不熟悉,但根据我们的理解,我们的代码是非阻塞的,但不确定。下面给出了主要方法的代码,如果是阻塞代码,请告诉我们如何使其成为非阻塞

当我们调用第一个方法时,将执行以下代码

exports.authenticate = function(req, res) {
    log.debug(req.headers['deviceID'] + messages.enterMethod + new Date());
    var deviceId = req.headers['deviceID'];
    if(deviceId != undefined){
        log.debug(deviceId + messages.fetchFromDB + new Date());
        authentication.find({where: {deviceID: deviceId}}).success(function(authObj){
            log.debug(deviceId + messages.fetchedFromDB + new Date());
            var validationString = "<customData>";
            if(authObj != null){
                if(timeStamp > authObj.timeStamp){
                    log.debug(deviceId + messages.validateUser + new Date());
                    if(isValidUser(validationString, deviceId)){
                        log.debug(deviceId + messages.updateUserTime + new Date());
                        authObj.updateAttributes({timeStamp: timeStamp}).success(function() {
                            log.debug(deviceId + messages.updatedUserTime + new Date());
                                generateSession(deviceId, req, res);    
                        }).error(function(err){
                            res.status(500).json({status: err});
                        });
                    }else{
                        log.debug(deviceId + messages.InvalidUser + new Date());
                        res.status(401).json(messages.authenticationFailed);
                    }
                }else{
                    log.debug(deviceId + messages.wrongTime + new Date());
                    res.status(401).json(messages.authenticationFailed);
                }
            }else{
                log.debug(deviceId + messages.validateUser + new Date());
                if(isValidUser(validationString, deviceId)){
                    log.debug(deviceId + messages.createUserTime + new Date());
                    authentication.create({deviceID: deviceId, timeStamp: timeStamp}).success(function(authentication){
                        log.debug(deviceId + messages.createdUserTime + new Date());
                        generateSession(deviceId, req, res);
                    }).error(function(err){
                        res.status(500).json({status: err});
                    });;    
                }else{
                    log.debug(deviceId + messages.InvalidUser + new Date());
                    res.status(401).json(messages.authenticationFailed);
                }
            }
        });
    }else{
        res.status(401).json(messages.authenticationFailed);
    }
};
请帮助我们找出CPU 100%使用率的原因,以及如何为2000或更多用户测试我们的应用程序

如果你还需要别的东西,请告诉我

问候,,
Krishan

您收到连接重置错误,因为您的服务器无法并行处理450个用户的负载。这里没有Jmeter的问题。不确定,但这可能与:嗨,请让我知道,如果你仍然有问题,我可能会提供帮助。请通过回复此评论让我知道。