背景
MM-Wiki 是一個(gè)輕量級(jí)的企業(yè)知識(shí)分享與團(tuán)隊(duì)協(xié)同軟件扣猫,可用于快速構(gòu)建企業(yè) Wiki 和團(tuán)隊(duì)知識(shí)分享平臺(tái)。部署方便籍铁,使用簡單郁妈,幫助團(tuán)隊(duì)構(gòu)建一個(gè)信息共享浑玛、文檔管理的協(xié)作環(huán)境。
https://github.com/phachon/mm-wiki
某天服務(wù)器磁盤滿了以后噩咪,出現(xiàn)已經(jīng)登錄的用戶會(huì)閃退回登錄界面的問題顾彰。以下是debug的過程。
環(huán)境介紹
Linux 18.04
mm-wiki 0.2.1
mysql
問題排查
在mm-wiki的
mm_wiki
├── logs
│ └──mm-wiki.logs
└──nohup.out
解決問題
在網(wǎng)上查找該問題胃碾,發(fā)現(xiàn)是go-sql-driver的問題涨享,而且有人給出了解決辦法。
在該issure下出現(xiàn)的回打如下仆百,就是將最大空閑鏈接設(shè)置為0厕隧。
查找網(wǎng)上的設(shè)置方法: SetMaxIdleConns
默認(rèn)情況下 sql.DB 會(huì)在鏈接池中最多保留 2 個(gè)空閑鏈接《碇埽可以通過 SetMaxIdleConns() 方法更改此方法吁讨,如下所示:
// 初始化一個(gè)新的鏈接池
db, err := sql.Open("postgres", "postgres://user:pass@localhost/db")
if err != nil {
log.Fatal(err)
}
// 將最大并發(fā)空閑鏈接數(shù)設(shè)置為 5.
// 小于或等于 0 表示不保留任何空閑鏈接.
db.SetMaxIdleConns(5)
Stack overflow 提供的解決辦法也是將MaxIdleConnections
修改為0就解決該問題。https://stackoverflow.com/questions/39980902/golang-mysql-error-packets-go33-unexpected-eof
針對(duì)mm-wiki的解決方法如下峦朗。
首先找到配置文件建丧,所在路徑為mm_wiki/conf/mm-wiki.conf
$ cd /mm_wiki/conf/
$ sudo nano mm mm-wiki.conf
將其中的conn_max_idle
修改為0。然后ctrl + x
保存文件后退出波势。
修改完畢以后翎朱,嘗試啟動(dòng)項(xiàng)目:
$ ./mm-wiki --conf conf/mm-wiki.conf
如果啟動(dòng)成功可以使用nohup將項(xiàng)目掛載起來。
$ nohup ./mm-wiki --conf conf/mm-wiki.conf &
總結(jié)
系統(tǒng)設(shè)計(jì)的時(shí)候艰亮,也應(yīng)該有個(gè)conf文件闭翩,避免debug的時(shí)候需要重新編譯和打包,這種設(shè)計(jì)方案可以在生產(chǎn)環(huán)境中直接重啟迄埃,讓配置生效。