背景
MM-Wiki 是一个轻量级的企业知识分享与团队协同软件,可用于快速构建企业 Wiki 和团队知识分享平台。部署方便,使用简单,帮助团队构建一个信息共享、文档管理的协作环境。
https://github.com/phachon/mm-wiki
某天服务器磁盘满了以后,出现已经登录的用户会闪退回登录界面的问题。以下是debug的过程。
环境介绍
Linux 18.04
mm-wiki 0.2.1
mysql
问题排查
在mm-wiki的
mm_wiki
├── logs
│ └──mm-wiki.logs
└──nohup.out
解决问题
在网上查找该问题,发现是go-sql-driver的问题,而且有人给出了解决办法。
在该issure下出现的回打如下,就是将最大空闲链接设置为0。
查找网上的设置方法: SetMaxIdleConns
默认情况下 sql.DB 会在链接池中最多保留 2 个空闲链接。可以通过 SetMaxIdleConns() 方法更改此方法,如下所示:
// 初始化一个新的链接池
db, err := sql.Open("postgres", "postgres://user:pass@localhost/db")
if err != nil {
log.Fatal(err)
}
// 将最大并发空闲链接数设置为 5.
// 小于或等于 0 表示不保留任何空闲链接.
db.SetMaxIdleConns(5)
Stack overflow 提供的解决办法也是将MaxIdleConnections
修改为0就解决该问题。https://stackoverflow.com/questions/39980902/golang-mysql-error-packets-go33-unexpected-eof
针对mm-wiki的解决方法如下。
首先找到配置文件,所在路径为mm_wiki/conf/mm-wiki.conf
$ cd /mm_wiki/conf/
$ sudo nano mm mm-wiki.conf
将其中的conn_max_idle
修改为0。然后ctrl + x
保存文件后退出。
修改完毕以后,尝试启动项目:
$ ./mm-wiki --conf conf/mm-wiki.conf
如果启动成功可以使用nohup将项目挂载起来。
$ nohup ./mm-wiki --conf conf/mm-wiki.conf &
总结
系统设计的时候,也应该有个conf文件,避免debug的时候需要重新编译和打包,这种设计方案可以在生产环境中直接重启,让配置生效。