nodejs做后台,每天都会出现“有数据库操作的请求无返回”的情况
发布于 3 年前 作者 hz0324 4009 次浏览 来自 问答

我们使用NodeJs做服务器开发,使用的是Express框架,数据库用的阿里云的MySQL RDS,nodejs连接mysql的包选用的是mysql(https://www.npmjs.com/package/mysql)

这几天只要UV上到1000,就会出现“跟数据库有关的请求全部无返回”的情况,一直是pending状态。页面是都能正常返回。只要重启一下服务器就又好了。

从服务器后台和数据库服务器后台的日志中都看不到任何错误,监控也都正常。 请问这是什么情况啊?大概是哪个地方出了问题?该怎么解决?

关键代码片段如下: //文件1,创建连接池,然后输出 var connectionPool = mysql.createPool(util.extend({}, config.db)); module.exports = connectionPool;

//文件n,之后所有的数据库操作都引入上面导出的pool,然后写成一个方法的形式对外输出,如下所示 var pool = require("./dbConnectionPool"); module.exports = { addUser: function (username, password, callback) { pool.getConnection(function (err, con) { con.query(‘insert into user(userName, password, emailVerified, createTime, updateTime) values(?, ?, 0, NOW(), NOW())’, [username, password], function (err, result) { if(err) console.error(err); callback(err, result); con.release(); }); }); }, }

PS:我们现在的数据库操作代码都是抄的网上的入门级教程,在实际应用中总感觉不够靠谱。请问哪里可以找到企业级的MySQL数据库操作教程啊,比如要考虑哪些方面,如何编写可靠的数据库代码等。多谢

4 回复

可能是数据库连接用完了。我们项目是共享数据库连接,即:在同一个业务单元中使用同一个数据库连接。大神些应该有更好的方案。

@stonechs0905 多谢,我觉得你说的可能是对的,就是连接池最大连接数设置出问题了。我们抄的网上的例子,没有设置这个值,我查了一下,默认是10,现在改成了600,准备再观察观察看看。多谢啊

改成600也没用吧,一个库,最大连接支持也就128吧,设置多了也是没用; 再一个可能就是,服务被阻塞了。而这种还真不一定就是数据连接; 也有可能是内存泄漏等造成的

@slclub 目前倒是没有出过错,阿里云的MySQL默认就是600了。我们用的那个node-mysql包默认是10,现在改成了600,确实好了

回到顶部