问题描述
到目前为止,我已经运行我的 reactJS 网站大约一年,并且每次进行部署后(在执行完以下操作后),服务器崩溃都发生了(这发生在最近3个月内)部署可以正常运行,但是)&第二天早上,当我尝试登录到我的网站时,我无法访问它,并且我必须重新启动我的 PM2 服务器,以使其再次运行。但是从上周开始,我的整个 AWS 实例崩溃了,我找不到原因,从上周开始,这两次发生在我身上。然后我必须去AWS Web并重新启动服务器(在我开始使用控制台之前,但是从现在开始我无法通过控制台访问它,必须去AWS Web并重新启动它)。
当第一次服务器崩溃时,我也得到了我的MysqL服务器关闭了连接,因为我是从日志中获取的:
db error Error: Connection lost: The server closed the connection. at Protocol.end (/home/ubuntu/Ciao_ERP/node_modules/MysqL/lib/protocol/Protocol.js:112:13) at Socket.<anonymous> (/home/ubuntu/Ciao_ERP/node_modules/MysqL/lib/Connection.js:94:28) at Socket.<anonymous> (/home/ubuntu/Ciao_ERP/node_modules/MysqL/lib/Connection.js:526:10) at Socket.emit (events.js:215:7) at Socket.EventEmitter.emit (domain.js:475:20) at endReadableNT (_stream_readable.js:1184:12) at processticksAndRejections (internal/process/task_queues.js:80:21) { fatal: true,code: 'PROTOCOL_CONNECTION_LOST' }
然后我使用了此解决方案:stackoverflow answer for handling 'PROTOCOL_CONNECTION_LOST'
然后我处理了该问题,但仍然出现连接丢失。
无论如何,我会附加连接处理和服务器代码段,以检查是否做错了什么!
SERVER.js
const express = require("express");
const cors = require("cors");
const { DBConnect } = require("./connection");
DBConnect();
const path = require("path");
const app = express();
app.use(express.json({ limit: "50mb",extended: true }));
app.use(
express.urlencoded({ limit: "50mb",extended: true,parameterLimit: 50000 })
);
app.use(cors());
app.use("/api/users",require("./routes/api/users"));
app.use("/api/invoiceSetting",require("./routes/api/InvoiceSetting"));
app.use("/api/auth",require("./routes/api/auth"));
app.use("/api/appSetting",require("./routes/api/AppSetting"));
app.use("/api/StakeHolder",require("./routes/api/StakeHolderSetting"));
app.use("/api/warehouse",require("./routes/api/WarehouseSetting"));
app.use("/api/production",require("./routes/api/ProductionSetting"));
app.use("/api/purchasing",require("./routes/api/Purchasing"));
app.use("/api/purchasingTemp",require("./routes/api/PurchasingTemp"));
//serve static assets if in production
app.use(express.static(path.join(__dirname,"../..","build")));
const port = process.env.PORTADDRESS || 5000;
app.listen(port,() => console.log(`listening on http://localhost:${port}`)).on(
"error",(err) => {
console.log(`catched error on listen & error is ${err}\n`);
}
);
const MysqL = require("MysqL");
require("dotenv").config();
let portDB = process.env.PORT_DB;
console.log("PORT ENV VARIABLE:",portDB);
if (portDB === undefined) {
process.exit();
}
var db_config = {
host: process.env.HOST_NAME,user: process.env.USER_NAME,password: process.env.PASSWORD,database: process.env.DATABASE,multipleStatements: true,port: portDB,};
let db = MysqL.createConnection(db_config);
const handledisconnect = () => {
db = MysqL.createConnection(db_config);
db.connect((err) => {
// The server is either down
if (err) {
// or restarting (takes a while sometimes).
console.log("error when connecting to db:",err);
console.log("& restarting");
setTimeout(handledisconnect,2000); // We introduce a delay before attempting to reconnect,} // to avoid a hot loop,and to allow our node script to
else {
console.log("Connected MysqL DB!");
}
}); // process asynchronous requests in the meantime.
// If you're also serving http,display a 503 error.
db.on("error",(err) => {
console.log("db error",err);
if (err.code === "PROTOCOL_CONNECTION_LOST") {
console.log(`err.code : PROTOCOL_CONNECTION_LOST appeard\n`);
// Connection to the MysqL server is usually
handledisconnect(); // lost due to either server restart,or a
} else {
// connnection idle timeout (the wait_timeout
console.log(`db.on("error") else called & err : ${err}\n`);
throw err; // server variable configures this)
}
});
};
module.exports = {
db: db,//this db is used to handling MysqL queries
DBConnect: handledisconnect,//this is used to start the db
};
如果能帮助我解决此服务器崩溃问题或我现在面临的整个AWS实例崩溃问题,我会很高兴:(
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)