mysql结合golang一次线上连接池事故处理
2019-12-03 本文已影响0人
数据小菜鸟
mysql 服务器默认断开86400 (8小时),以前搞游戏的时候经常一早起来服务挂掉(因为半夜比较多空闲mysql被服务器断开了)解决方案 写一个线程定时ping 能解决。
最近搞的游戏加速器项目。mysql 参数被运维同学改成10了,导致线上mysql 一直 报错 EOF,github里面也挺多人说的。
git图片.png
经过多次调试无果 以为搞不定就先把
//这样设置关闭掉golang mysql 的连接池,每次查询时创建连接,因为阿里云的数据使用域名 地址,总体下来连接时间不稳定 从毫秒级别 到秒级别 (我线上接口因为这个参数 最差时一个简单查询5s)
SetMaxIdleConns(0) //空闲连接维持数量 0 关闭
SetMaxOpenConns(0) //限制连接数量如果有mysql 事务忘记关闭 导致连接泄露时这个会加速暴露问题
SetConnMaxLifetime(0) //这个配合 空闲连接数量 > 0 时,此参数要 WAIT_TIMEOUT/2 > maxlitetime
//研究完
SetMaxIdleConns(5) //最多保持5个空闲连接
SetMaxOpenConns(100) //最大连接数不超过100
SetConnMaxLifetime(60) //1分钟一次心跳 WAIT_TIMEOUT 建议(5分钟~30分钟之间)
优化之后 接口 稳定在10毫秒以内
修改记录.png 阿里云参数.png总结
环境 go1.12.5
开发环境 window10
线上环境 centos7 (跨平台编译)
完美解决问题。mark一下简书发现挺多小伙伴遇到这个问题的。希望能帮助大家少躺坑。开发不易。