故障分析 | MySQL 耗尽主机内存一例分析

本文针对一台MySQL服务器频繁耗尽内存的问题进行了深入分析。通过检查错误日志、内存分配及使用情况,发现内存碎片化严重,并采取更换内存分配器等措施有效解决了问题。

作者:付祥

现居珠海,主要负责 Oracle、MySQL、mongoDB 和 Redis 维护工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


异常现象

开发人员反馈,有一台服务器内存几乎被 MySQL 耗尽了,执行 top 命令,输出如下:

这台机器是个测试环境,MySQL 是开发自己安装的,数据库版本 5.6.51 ,机器总内存32G,MySQL 占了29G。

分析过程

查看 MySQL 启动时间发现1个星期前才启动,猜测之前由于主机内存耗尽触发了 OOM ,查看 MySQL 错误日志,发现每隔10几天,MySQL 就异常关闭一次:

2022-02-24 03:03:42 20981 [Note] InnoDB: Database was not shutdown normally!
2022-03-13 02:31:40 4134 [Note] InnoDB: Database was not shutdown normally!
2022-03-31 02:31:08 6846 [Note] InnoDB: Database was not shutdown normally!
2022-04-12 02:31:41 1159 [Note] InnoDB: Database was not shutdown normally!
2022-04-23 04:41:51 6773 [Note] InnoDB: Database was not shutdown normally!
2022-05-04 02:31:52 2499 [Note] InnoDB: Database was not shutdown normally!
2022-05-13 04:56:06 23010 [Note] InnoDB: Database was not shutdown normally!
2022-05-30 02:31:33 3244 [Note] InnoDB: Database was not shutdown normally!

查看操作系统日志,进一步验证了 MySQL 耗尽主机内存,触发 OOM :

# grep oom-killer /var/log/messages* /var/log/messages-20220605:May 30 02:31:30 vm10-136-9-24 kernel: mysqld invoked
oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

查看 my.cnf 配置文件,发现几乎都是默认配置,innodb_buffer_pool_size 等于默认值128M :

mysql> show variables like 'innodb_buffer_pool_size'; 
+-------------------------+-----------+
| Variable_name | Value               | 
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 | 
+-------------------------+-----------+

当前数据库有500多个连接,都是 Sleep 状态,从 MySQL 错误日志发现 performance_schema 下的表结构全是错误的,估计 MySQL 版本做了升级,没有执行 upgrade升 级数据字典,意味着一些内存诊断信息便不能从 PS 获取:

2022-06-09 11:19:08 27468 [ERROR] Native table
'performance_schema'.'cond_instances' has 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值