节点JS进程崩溃而没有错误记录

时间:2015-03-21 17:53:29

标签: node.js express crash

我尝试使用Express运行一个非常简单的Node JS服务器实现来提供EJS内容。当我启动服务器并且它运行得很好,但一段时间后意外崩溃。有时它会在半小时内崩溃,而有时它会一直保持4-6小时。

我似乎无法确定错误来源,因为我的日志不包含任何堆栈跟踪。

我已经采取了this answer's advice而且我有这个:

process.on('uncaughtException', function (exception) {
    console.log(exception); // to see your exception details in the console
});

并且我还重载了console方法以记录到文件,如下所示:

console.log = function(d) {
    log(d);
};

console.error = function(d) {
    log(d);
};

function log(message) {
    log_file.write(util.format(message) + '\n');
    log_stdout.write(util.format(message) + '\n');
}

但是,服务器崩溃而没有报告任何内容。我还试图创建一个节点domain

var domain = require('domain');
var d = domain.create();

d.on('error', function(err) {
    console.error(err);
});

如果我不得不猜测,我会想象这个错误可能是由于内存耗尽而导致的,因为我在Raspberry Pi B型2上运行了所有这些,但我不能确定。如果它真的耗尽了内存,我希望看到:

  

致命错误:JS分配失败 - 处理内存不足

在我的日志中的某处报告。

我的服务器本身很简单:

// Create Express and set up the EJS view engine
var app = express();
app.set('view engine', 'ejs');
app.use("/resources", express.static(__dirname + "/resources"));

// Setup the index page view
app.get('/', function(req, res) {
    console.log(getFormattedDate() + req.method + " " + req.url + " by " + req.connection.remoteAddress);
    res.render('pages/index', {
        title: "James Taylor",
        content: formattedContent
    });
});

app.get('*', function(req, res, next) {
    var err = new Error();
    err.status = 404;
    next(err);
});

app.use(function(err, req, res, next) {
    if (err.status == 404) {
        console.error(getFormattedDate() + err + req.url);
        res.set("Content-Type", "text/plain");
        res.status(err.status);
        res.send(err.message);
    } else {
        console.error(err);
        return next();
    }
});

与此同时,我已经能够使用forever来解决这个问题,这似乎很有效。

我很感激您就尝试解决此问题提出的任何建议。我不得不将所有这些基础设施围绕着永久性崩溃的服务器,这似乎是对的。

0 个答案:

没有答案