我有一个使用 Express.js 的简单应用程序,可以处理来自远程系统的发布数据。
有基本身份验证 (express.basicAuth) 和一些其他模块(用于 DB 连接池的通用池、用于时间计算的 moment.js 和 mysql)以及 Forever 以将应用程序作为服务运行。该应用程序在 SuSe 11.2 上运行以防万一。
一切运行正常大约 2 小时 - 数据被发布、处理,然后存储。每个帖子大约 1kb~ 的数据,每小时 80 个帖子。之后,应用程序变得无响应,直到应用程序重新启动($ 永远重新启动)
我对 Node 很陌生,不知道下一步该去哪里调试问题。当应用程序无响应时,没有任何内容写入访问或错误日志文件,并且不确定是否有其他方法可以获得有意义的输出或堆栈跟踪。
任何建议或方向将不胜感激!
编辑:正如评论中添加的那样,数据被解析并使用通用池直接写入 MySQL 表以进行连接管理。
具体来说:
var poolModule = require('generic-pool');
var pool = poolModule.Pool({
name: 'mysql',
create: function(cb) {
var mysql = require('mysql');
var db = mysql.createConnection({ host: '...', user: '...', 'password: '...' });
cb(null, db);
},
destroy: function(client) { client.end(); },
max: 10
});
然后在路由器中:
function(req, res) {
pool.acquire(function(err,client)) {
if(err) throw err;
// ...data parsing / query building
client.query('...the query...', function(err, rows, fields) {
pool.release(client);
if(err) { res.send(err); }
else { res.send('success'); }
}
});
}
Edit2 - 似乎发生了导致数据库连接未关闭的故障事件。我注意到 2 个连接打开了 5 分钟和 15 分钟。鉴于这种增长速度,很容易达到最大连接限制 (10) 并导致挂起。我很快就会知道这是不是罪魁祸首!:)