MYSQL数据库MySQL OOM 系列一 Linux内存分配
《MYSQL数据库MySQL OOM 系列一 Linux内存分配》要点: RDS(网易云关系数据库服务)上线已经有一段时间,陆续不断有产品迁入到了RDS中,在线上运维的过程中,也遇到了一些曾经没有考虑到,或者考虑的不全的东西.后续有时间可以分享给大家.MYSQL实例 今天想提到的是线上一个4G的RDS实例,发生了OOM(out of memory)的问题,MySQL进程被直接Kill掉了.在解释这个问题的时候,我们首先需要从Linux系统内存分配策略讲起. ??? 为了验证Linux的内存分配,我们用个小程序来测试一下:MYSQL实例 #include <stdio.h> #include <stdlib.h> #define MEGABYTE 1024*1024 int main(int argc,char *argv[]) { void *myblock = NULL; int count = 0; while (1) { myblock = (void *) malloc(MEGABYTE); if (!myblock) break; printf("Currently allocating %d MBn",++count); } exit(0); } #include <stdio.h> #include <stdlib.h> #define MEGABYTE 1024*1024 int main(int argc,char *argv[]) { void *myblock = NULL; int count = 0; while(1) { myblock = (void *) malloc(MEGABYTE); if (!myblock) break; memset(myblock,1,MEGABYTE); printf("Currently allocating %d MBn",++count); } exit(0); } 前者再通过malloc()申请了内存空间以后,并没有立即去使用它,而后者相反,每次申请完都立即用1去填充.我们来看看两个程序运行的结果.MYSQL实例 这是在1G的RAM,400M Swap的虚拟机上运行的结果,前者申请了远远超过实际内存的空间,后者并没有超过实际内存可用空间.这就验证了前面叙述的Linux的内存分配策略. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |