MySQL server has gone away (2006) 排查

本文详细分析了日志统计系统从A机器迁移至B机器后,统计数据异常的原因,主要是由于B机器CPU负载较高,导致在访问高峰时段,日志处理速度接近极限,与数据库交互时间延长,最终触发MySQL断开连接的问题。文章进一步揭示了日志处理过程中的内部机制,指出更新日志处理进度的循环操作是问题的关键,并通过调整数据库配置和增加CPU处理能力来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、现象

     原先一直运行比较稳定的实时日志统计系统,由A机器迁移至B机器,第二天发现统计数据异常,查看日志注意到分析程序经常产生MySQL server has gone away (2006)异常退出,守护进程重新启动分析程序导致


二、问题推测

根据前后系统之间差异进行推测

1. 数据库授权,因为系统能连接上,首先排除这个因素

2. 日志收集器问题,跟这个关系不是很大,也排除除外

3. A和B机器之前的差异,注意到A机器的CPU一般5%不到,B机器CPU 一直30%~40%,最有可能此因素导致


二、问题定位

1. 查看导致MySQL server has gone away (2006)集中出现的时间正是访问高峰时期,在访问量很低的时候没有出现问题

2. 应该是高峰期超过一定时间没有和数据库交互,然后服务器主动断开连接


三、疑惑点

1. 由于日志分析的内部处理特性,应该高峰时期跟数据库交互更加频繁,没什么量时和数据库交互很少才对,而现在的想象正好反过来了


四、查出真相

1. 再次仔细查看日志,发现抛异常MySQL server has gone away (2006)主要发生在更新日志处理进度,豁然开朗

2. 我们的分析程序首先从日志中读取日志,进行处理,一直读取到EOF标识,更新处理进度,然后sleep(1),再次循环

3. 平时由于处理速度远超过日志写入速度,因为经常sleep(1),更新处理进度,相当于和数据库保持心跳,没有超过数据库超时时间

4. 而高峰时间,日志量非常大,处理能力接近日志产生能力,CPU接近90%,理论上也会定期和数据库交互,但是由于sleep的问题,日志处理能力接近极限,再加上linux 内核中文件缓存的原因,导致每个日志处理周期加长,日志处理时间就会大于10秒,没有与数据库交互,数据库主动断开连接,然后缓存在进程内存中数据丢失

5. 找OPS询问,发现A机器是32核的,B机器是4核的, 这才解释为啥B机器和A机器处理能力差距这么大


五、解决办法

1. 修改数据库配置,由于数据库由DBA统一管理,很难找出说服他修改的理由,而已即使加上超时时间,没有本质解决问题

2. 加大CPU处理能力,因为性能的瓶颈在CPU,因此采用此种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值