2017-02-07 2 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; 

Log сервера, когда перестает отвечать на запросы, но по-прежнему получать запросы. Он не может загружать какие-либо представления или статические файлы.

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

такое же предложение, играйте с ним, используя try catch и рисуйте наш, где находится сервер. –

+0

Я бы предположил, что вы не выпускаете какой-то ресурс базы данных, и в итоге у вас заканчиваются ресурсы. – jfriend00

ответ

0

Спасибо за ответ, проблема была в oracledb пуле, когда он истекает, он зависает на сервере. Я изменил его для магазина экспресс-файлов, и теперь он работает нормально.

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

У вас, вероятно, был пул сеансов больше, чем количество потоков, доступных узлу-oracledb. См. Подключения и количество потоков [https://github.com/oracle/node-oracledb/blob/v1.12.2/doc/api.md#numberofthreads] в документе. Он указывает, что каждое соединение блокирует поток. Перед запуском узла вы должны столкнуться с UV_THREADPOOL_SIZE. Узел сеанса узла oracledb имеет некоторые преимущества перед внешними пулами, особенно в отношении балансировки нагрузки и обнаружения мертвого соединения. –

Смежные вопросы