项目中用mycat做的分表分库,异步通知系统会连接mycat去查数据库数据,有时会抛异常提示mysql server has gone away。最初以为是mycat的问题,在修改了mycat的配置,缩短心跳时间,增加空闲超时时间后,发现问题仍然存在。说明问题在mysql上,经过咨询后发现是mysql的最大连接数用的是默认值:151,这个太小,现已修改为1000。并修改max_allowed_packet = 20M
本次排查涉及到的一些参数:
mysql> show variables like ‘%connect%’;
max_connections MySQL服务实例能够同时接受的的最大并发连接数
mysql> show status like ‘%connections%’;
Connection_errors_max_connections 当MySQL的最大并发数大于系统变量(show variables)中max_connections的最大并发数,因此而被拒绝的次数
Max_used_connections MySQL从启动至今,同一时刻并发的连接数最大值。如果这个值大于 max_connections则表明系统经常处于高并发的状态,应该考虑调大最大并发连接数。
mysql> show variables like ‘thread%’;
thread_cache_size MySQL线程的缓存池(thread cache pool),将空闲的连接线程放入连接池中缓存起来,而非立即销毁。当有新的连接请求时,如果连接池中有空闲的连接,则直接使用。否则要重新创建线程。
mysql> show status like '%Abort%';
Aborted_clients 当ablort clients增大的时候意味着有客户端成功建立连接,但是很快就断开连接或者被终止了,这种情况一般发生在网络不稳定的环境中。主要的可能性有
a)客户端没有主动关闭mysql连接mysql_close()。
b)wait_timeout设置很短被mysql干掉了。
c)客户端由于某些原因被干掉了。