mariadb 인스턴스에 연결하는 PCF에 nodejs 어플리케이션이 있습니다. 인스턴스 wait_timeout
은 600이므로 비활성 후 10 분 후에 연결이 끊어집니다.Nodejs Mariadb on PCF timeout이 mariadb 이벤트를 트리거하지 않음
내 로컬 컴퓨터에서이 응용 프로그램을 실행하고 docker의 mariadb 로컬 인스턴스에 연결하면 (시간 초과 조회가 발생하거나 연결이 끊어지면) MySQL Server has gone away
이 표시되고 응용 프로그램이 다시 연결되어 데이터베이스 결과를 제공합니다. 로컬에서는 크래시가 발생하지 않습니다. PCF에서이 작업을 실행할 때 mariadb 오류가 응용 프로그램을 충돌합니다 또는 예외가 잡힌 경우 충돌하고 보내드립니다
Headers already sent error
내가 MariaDB가 연결을 죽이고 일단 어떻게 든 노드에서 mariadb 드라이버가 통지되지 않는다는 것을 믿는다 연결에 이벤트 처리기가 있어도 연결이 끊어졌습니다. 따라서 일단 응용 프로그램이 쿼리를 실행하려고 시도하면 이벤트가 트리거되지 않았고 닫힌 연결에서이를 실행하려고 시도하기 때문에 실패합니다.
내 연결 모듈
// Loading local .env vars
var route_helper = require("./route_helper");
route_helper.loadLocalEnvVars();
var Client = require('mariasql');
var moment = require('moment');
var connection = null;
try{
connection = new Client({
host: process.env.DB_MARIA_HOST,
user: process.env.DB_MARIA_USER,
password: process.env.DB_MARIA_PASS,
db: process.env.DB_MARIA_SCHEMA,
port: parseInt(process.env.DB_MARIA_PORT),
connTimeout: 20,
pingInterval: 1,
compress: true
});
connection.connect(function(err){
if(!err) {
if(process.env.DEBUG == "true"){
console.log("Database is connected");
}
} else {
console.log("Error connecting database " + err.message);
console.log(err);
}
});
connection.on('ready',function(){
if(process.env.DEBUG == "true"){
console.log("Connection ready " + moment().format('MMMM Do YYYY, h:mm:ss a'))
}
});
connection.on('close',function(){
if(process.env.DEBUG == "true"){
console.log("Connection closed " + moment().format('MMMM Do YYYY, h:mm:ss a'))
}
});
connection.on('error',function(err){
if(process.env.DEBUG == "true"){
console.log("Connection timeout... Reconnecting")
console.log(err);
}
if(err.code == 2006){
this.connect();
}
//this.connect();
});
}catch(err){
console.log("Maria_db error")
console.log(err)
throw err;
}
module.exports = connection;
로드 서버 라우터
var routes = require("./routes/application.js").appRouter(server);
var server = server.listen(process.env.PORT, function() {
console.log("Listening on port %s...", server.address().port);
});
내 경로는
app.get("/applications", function (req, res) {
try{
var applications;
var dbConn = require("../util/db.js");
dbConn.query('SELECT some stuff’, function (error, results) {
if(!error) {
applications = {
"apps": results
}
return res.send(applications);
} else {
return res.send({"status": "error", "message": error.code});
}
});
}catch(err) {
console.log(err)
}
});
MySQL은 오류
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client.<anonymous> (/home/vcap/app/util/dbHealth.js:14:9)
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at emitOne (events.js:101:20)
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client.emit (events.js:191:7)
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client._onerror (/home/vcap/app/node_modules/mariasql/lib/Client.js:395:10)
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12
2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at process._tickCallback (internal/process/next_tick.js:104:9)
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! Exit status 1
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! Failed at the [email protected] start script 'node server.js'.
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! not with npm itself.
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! You can get information on how to open an issue for this project with:
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! npm bugs myapplication
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! Or if that isn't available, you can get their info via:
2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! npm owner ls myapplication
2017-12-20T09:03:55.33-0500 [APP/PROC/WEB/0] ERR npm ERR! Please include the following file with any support request:
2017-12-20T09:03:55.33-0500 [APP/PROC/WEB/0] ERR npm ERR! /home/vcap/app/.npm/_logs/2017-12-20T14_03_55_316Z-debug.log
,536 멀리 간
헤더가 이미 전송되었습니다. 그것들은 또한 이상하게 보이는 순서가 어긋난 것처럼 보인다. 이 테스트 중에 나는 3 개의 다른 서비스에 3 개의 HTTP 요청을 보내고이 오류가 발생합니다.
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at _combinedTickCallback (internal/process/next_tick.js:131:7)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at process._tickCallback (internal/process/next_tick.js:180:9) code: 2006 }
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR _http_outgoing.js:494
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at validateHeader (_http_outgoing.js:494:11)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.send (/home/vcap/app/node_modules/express/lib/response.js:158:21)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at Object.cb (/home/vcap/app/routes/application.js:474:29)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at _combinedTickCallback (internal/process/next_tick.js:131:7)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at process._tickCallback (internal/process/next_tick.js:180:9) code: 2006 }
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR throw new Error('Can\'t set headers after they are sent.');
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR Error: Can't set headers after they are sent.
2017-12-27T11:07:46.41-0500 [APP/PROC/WEB/0] OUT Connection timeout... Reconnecting
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at _combinedTickCallback (internal/process/next_tick.js:131:7)
2017-12-27T11:07:46.41-0500 [APP/PROC/WEB/0] OUT Route: /applications
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.setHeader (_http_outgoing.js:501:3)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.header (/home/vcap/app/node_modules/express/lib/response.js:767:10)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at process._tickCallback (internal/process/next_tick.js:180:9) code: 2006 }
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR ^
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.send (/home/vcap/app/node_modules/express/lib/response.js:170:12)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.json (/home/vcap/app/node_modules/express/lib/response.js:267:15)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at cleanupReqs (/home/vcap/app/node_modules/mariasql/lib/Client.js:744:11)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at Client._onclose (/home/vcap/app/node_modules/mariasql/lib/Client.js:574:5)
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at Client._onerror (/home/vcap/app/node_modules/mariasql/lib/Client.js:396:10)
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! Failed at the [email protected] start script.
2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR npm ERR! code ELIFECYCLE
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR!
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! [email protected] start: `node server.js`
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! Exit status 1
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! errno 1
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! A complete log of this run can be found in:
2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! /home/vcap/app/.npm/_logs/2017-12-27T16_07_46_432Z-debug.log
편집 :이 응용 프로그램의 구조는 자신감
내가knex
드라이버 만
mariasql
NPM 드라이버로 전환
'일부 물건을 선택하십시오'가 10 분 이상 걸릴 수 있습니까? 이 진위 여부를 결정하는 진술을 분리하십시오. 느린 경우 나머지 부분 (PDF, 헤더, ERR 등)이 아닌 해당 항목에 집중합시다. –
셀렉션이 1 행 또는 최대 1000 개만 선택되었습니다. 쿼리가 빠르게 실행되었지만이를 해결할 수 없습니다. . 내 "응답"을 참조하십시오. 운전사를 바꿔 줘야했습니다. – tiggles