2017-02-07 21 views
0

私のサーバーは動作していますが、時間がたつと応答が停止し、ページをロードしようとすると接続が確立できません。Nodejsが応答時間を指定して応答を返す

マイapp.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var oracledb = require('oracledb'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var session = require('express-session'); 
var multer = require('multer'); 
var fileUpload = require('express-fileupload'); 
var sessionStore; 
var app = express(); 

var oracleDbStore = require('express-oracle-session')(session); 

var connect = require(path.join(__dirname, 'connection', 'conn'))(2); 

oracledb.createPool(connect, function(err, pool) { 
     if (err) { 
     console.error("createPool() error: " + err.message); 
     return; 
      } 
      pool.getConnection(function(err, connection) { 
       if (err) { 
        handleError(response, "getConnection() error", err); 
        return; 
       } 
       var diffopt = {externalAuth: true, 
          checkExpirationInterval: 900000, 
          expiration: 86400000, 
          createDatabaseTable: true, 
          connectionLimit: 1, 
          schema: { 
           tableName: 'sessions', 
           columnNames: { 
            session_id: 'session_id', 
            expires: 'expires', 
            data: 'data' 
           } 
          }}; 
       var options = Object.assign({},connect,diffopt); 
       sessionStore = new oracleDbStore(options, connection); 
      }); 
     }); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'twig'); 

// uncomment after placing your favicon in /public 
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(fileUpload()); 
app.use(cookieParser()); 
app.use('/files',express.static(path.join(__dirname, 'public'))); 
app.use('/archivos',express.static(path.join(__dirname, 'archivos'))); 
app.set('trust proxy', 1); 
app.use(session({ 
    secret: "work", 
    name: 'sessionId', 
    store:sessionStore, 
    resave: false, 
    saveUninitialized: false 
})); 

var links = require('./links'); 

for(var i=0;i<links.length;i++){ 
    app.use(links[i].route, require(links[i].direction)); 
} 

app.get('*',function(req,res){ 
    res.redirect('/'); 
}); 

app.get('/', function(req, res){ 
    res.sendFile(path.join(__dirname, 'views/index.twig')); 
}); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

応答を停止したが、まだ要求を取得し、サーバのログ。ビューまたは静的ファイルのいずれもロードできません。

GET /files/stylesheets/jquery-ui.css - - ms - - 
GET /files/jscript/jquery.min.js - - ms - - 
GET /files/stylesheets/font-awesome.min.css - - ms - - 
GET /files/stylesheets/style.css - - ms - - 
GET /files/stylesheets/AdminLTE.css - - ms - - 
GET /files/stylesheets/bootstrap.min.css - - ms - - 
GET/304 2.676 ms - - 
GET /files/stylesheets/AdminLTE.css - - ms - - 
GET /files/stylesheets/style.css - - ms - - 
GET /files/stylesheets/font-awesome.min.css - - ms - - 
GET /files/stylesheets/bootstrap.min.css - - ms - - 
GET /files/stylesheets/jquery-ui.css - - ms - - 
GET/304 2.759 ms - - 
GET /files/stylesheets/jquery-ui.css - - ms - - 
GET /files/jscript/jquery.min.js - - ms - - 
GET /files/stylesheets/bootstrap.min.css - - ms - - 
GET /files/stylesheets/font-awesome.min.css - - ms - - 
GET /files/stylesheets/AdminLTE.css - - ms - - 
GET /files/stylesheets/style.css - - ms - - 
GET /login 200 1.157 ms - 1417 
GET /files/imagenes/up.jpeg - - ms - - 
GET /files/stylesheets/bootstrap.min.css - - ms - - 
GET /files/stylesheets/bootstrap.min.css - - ms - - 
POST /login - - ms - - 

最後に、サーバーを再起動してもう一度動作させる必要があります。

+0

私の疑惑は、接続を確立できないため、プロセスが終了していることです。リソースが不足している場合を除き、これはおそらく未処理の例外が原因です。私の提案は、それを使って遊んで、それを壊す方法を見つけ出すことです。そして、エラーのポイントを回避してデバッグできるように、エラーのポイントを増やしてください。 – Mic

+0

と同じ提案を試してみてください。試してみてください。 –

+0

私はあなたが何らかのデータベースリソースを解放していないと思って、最終的にリソースが足りなくなると思います。 – jfriend00

答えて

0

お返事ありがとうございます。問題はoracledbプールです。期限が切れるとサーバーがハングアップします。私はエクスプレスファイルストアのためにそれを変更しました。

app.use(session({ 
    store: new FileStore(options), 
    secret: "work", 
    name: 'sessionId', 
    resave: true, 
    saveUninitialized: false 
})); 
+0

node-oracledbで使用できるスレッドの数よりも大きなセッションプールがある可能性があります。ドキュメントの「接続とスレッド数」(https://github.com/oracle/node-oracledb/blob/v1.12.2/doc/api.md#numberofthreads)を参照してください。各接続がスレッドをブロックすることを指摘しています。 Nodeを起動する前にUV_THREADPOOL_SIZEをバンプする必要があります。 node-oracledbセッションプールには、特に負荷分散やデッドコネクションの検出など、外部プールに比べていくつかの利点があります。 –