Javascript Node.js服务器循环中的SQL查询
我正在尝试使用Node.js设置服务器。 对于数据库,我使用Xampp。 我想在提供/update时运行updateEngine函数。 一切都在工作,除了代码是循环的,过了一段时间我得到了一个错误。 我使用了node-max\u old\u space\u size=2000000 输出Javascript Node.js服务器循环中的SQL查询,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在尝试使用Node.js设置服务器。 对于数据库,我使用Xampp。 我想在提供/update时运行updateEngine函数。 一切都在工作,除了代码是循环的,过了一段时间我得到了一个错误。 我使用了node-max\u old\u space\u size=2000000 输出 server is up!! connected as id 38 into the query connected as id 39 into the query 错误 ====JS堆栈跟踪====
server is up!!
connected as id 38
into the query
connected as id 39
into the query
错误
====JS堆栈跟踪====致命错误:调用并重试上次分配失败-进程内存不足
代码
Xampp
建议:
对你的请求发送响应,即使只是一个简单的200 OK,没有正文。现在它从未响应,因此客户端可能正在超时并自动重试请求
使用启动时创建的数据库连接池,而不是为每个请求创建新的数据库连接。使用连接池效率更高,因为您不会每次都创建和断开连接,这会增加请求的开销和延迟
我发送了一个简单的200响应,但错误仍然存在…该路径将很少使用。这是节点问题还是mysql配置问题?到目前为止,您发布的代码没有其他问题。问题在别处。testtable有100.000个条目,这是问题吗?响应在查询完成之前显示在浏览器中,这可能解释了OOM错误,但肯定不能解释对updateEngine的重复调用。我用sql详细信息更新了我的问题。我能避免这个错误吗?connection.end是否停止查询?在活动监视器节点中,似乎达到了100%,然后我得到了错误。
69777 ms: Mark-sweep 1398.8 (1456.7) -> 1398.8 (1456.7) MB, 1871.5 / 0 ms [allocation failure] [GC in old space requested].
71705 ms: Mark-sweep 1398.8 (1456.7) -> 1398.8 (1456.7) MB, 1928.0 / 0 ms [allocation failure] [GC in old space requested].
73346 ms: Mark-sweep 1398.8 (1456.7) -> 1398.8 (1456.7) MB, 1640.7 / 0 ms [last resort gc].
75283 ms: Mark-sweep 1398.8 (1456.7) -> 1398.8 (1456.7) MB, 1937.4 / 0 ms [last resort gc].
http = require('http');
var connect = require('connect');
var mysql = require('mysql');
var app = connect();
app.use('/update',updateEngine);
http.createServer(app).listen(8080);
console.log("server is up!!");
function updateEngine(request,response,done) {
var connection = mysql.createConnection({
host: 'localhost',
port: '3306',
user: 'root',
password: '',
database: 'test'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
connection.query('SELECT * FROM `testtable`' , function (error, results, fields) {
console.log("into the query");
});
connection.end();
}
The MySQL server
[mysqld]
user = mysql
port=3306
socket = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
skip-external-locking
key_buffer = 16M
max_allowed_packet = 500M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M