记录一个排查oom思路
一、背景
客户反馈系统白屏,同时运维反馈内存占用多。项目包括数据库等,是部署在不同docker里的
二、查linux日志是linux将mysql杀掉了
egrep -i -r 'killed process' /var/log;
编辑搜图
然后系统内部实现了mysql挂了,过段时间自动拉起,所以mysql挂的那段时间客户感受是白屏
三、mysql5.7以上版本,默认开启performance_schema
SHOW VARIABLES LIKE 'performance_schema'; status
配置启动performance_schema
performance_schema = ON
4、内存相关的表
use performance_schema; show tables like '%memory%';
5、查看总消耗内存
select * from sys.memory_global_total;
编辑搜图
六、查看总体内存占用情况
select event_name,CURRENT_NUMBER_OF_BYTES_USED/1024/1024 from performance_schema.memory_summary_global_by_event_name order by CURRENT_NUMBER_OF_BYTES_USED desc LIMIT 20;
编辑搜图
七、线程内存占用情况
select thread_id,event_name,CURRENT_NUMBER_OF_BYTES_USED/1024/1024 from performance_schema.memory_summary_by_thread_by_event_name order by CURRENT_NUMBER_OF_BYTES_USED desc limit 20;
编辑搜图
八、总结
到此就分析结束了,从上述可以发现msyql内存并没有占用很多内存。mysql被杀掉的原因是:其他容器内存占用过高,但是linux的规则是谁的评分高就先kiil谁,并不是根据内存占用来做的。