我在digitalocean Droplet中安装了一个nodejs应用程序。我正在使用mysql作为数据库,并通过使用池连接。
pool = mysql.createPool({
connectionLimit: 10,
host: "localhost",
user: "root",
password: "password",
database: "mydb",
supportBigNumbers: true,
bigNumberStrings: true,
charset : 'utf8mb4',
connectTimeout:500,
});
并按照以下方式使用连接。
socket.on('login', function (msg) {
pool.getConnection(function (err, con) {
if (err) {
throw err;
} else {
login(socket, con, io, msg);
}
});
});
是因为池连接还是我做错了吗?我已经在服务器启动时需要了所有必需的模块,但是在必要时将require放在了模块内部。
我的一个模块代码就是这样。
const checkSession = require('./checkSession').checkSession;
const checkCookie = require('./checkCookie').checkCookie;
module.exports = function (socket, con, io, msg) {
var obj = JSON.parse(JSON.stringify(msg));
var username = obj.loggedusername;
checkSession(socket, con, io, msg, function (returnValue) {
if (returnValue == "sessionOK") {
con.query("SELECT fullname FROM users WHERE username=?",[username], function(err, data){
if (err) throw err;
io.to(socket.id).emit("getdetailsresponse", {
fullname: data[0].fullname,
});
});
}
});
con.release();
}
还是因为我不应该在模块内部要求东西?
起初,服务器运行良好,CPU使用率约为2-3%,但是当我看到一两个小时后,我从mysql和node上获得了很高的cpu使用率,最后节点停止响应。