作者:孙祚龙
爱可生南区分公司交付服务部成员,实习工程师。负责公司产品问题排查及日常运维工作。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
引言
前阵子处理这样一个案例,某客户的实例 mysqld 进程内存经常持续增加导致最终被 OOM killer。作为 DBA 肯定想知道有哪些原因可能会导致 OOM(内存溢出)。
此篇文章叙述个人的一些拙见~
先介绍下这位朋友:OOM-killer
OOM Killer(Out of Memory Killer) 是当系统内存严重不足时 linux 内核采用的杀掉进程,释放内存的机制。
OOM Killer 通过检查所有正在运行的进程,然后根据自己的算法给每个进程一个 badness 分数,拥有最高 badness 分数的进程将会在内存不足时被杀掉。
它打分的算法如下:
-
某一个进程和它所有的子进程都占用了很多内存的将会打一个高分。
-
为了释放足够的内存来解决这种情况,将杀死最少数量的进程(最好是一个进程)。
-
内核进程和其他较重要的进程会被打成相对较低的分。
上面打分的标准意味着,当 OOM killer 选择杀死的进程时,将选择一个使用大量内存,有很多子进程且不是系统进程的进程。
简单来讲,oom-killer 的原则就是损失最小、收益最大,因此它会让杀死的进程数尽可能小、释放的内存尽可能大。在数据库服务器上,MySQL 被分配的内存一般不会小,因此容易成为 oom-killer 选择的对象。
“既然发生了 OOM,那必然是内存不足,内存不足这个问题产生原因很多。
首先第一个就是 MySQL 自身内存的规划有问题,这就涉及到 mys

本文探讨了OOM(内存溢出)现象在MySQL中的原因,包括内存规划不当和潜在的内存泄漏,以及如何通过调整配置和使用Valgrind工具进行检测。
最低0.47元/天 解锁文章
812

被折叠的 条评论
为什么被折叠?



