numa 和 mysql

cpu numa结构反应的内存访问速度问题:

numa 和 mysql

在多核cpu的时代引入了cpu的numa(非一致内存访问结构):

NUMA引入了node的概念,每个物理CPU都被视作一个node,而每个node都有一个local memory(访问速度更快),其他node的内存则为remote

NUMA的内存分配策略有localalloc、preferred、membind、interleave。
localalloc规定进程从当前node上请求分配内存;
preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node。
membind可以指定若干个node,进程只能从这些指定的node上请求分配内存。
interleave规定进程从指定的若干个node上以Round-roll算法交织地请求分配内存。

在centos中,localalloc是默认的NUMA内存分配策略,
这个配置选项导致资源独占程序很容易将某个node的内存用尽。而当某个node的内存耗尽时,
Linux又刚好将这个node分配给了某个需要消耗大量内存的进程(或线程),
此时即便其他node有空闲内存也无济于事,于是就产生了swap(swap对性能影响非常大)

[root@zabbix-server bin]# sysctl -a|grep vm.zone
vm.zone_reclaim_mode = 0
numa结构中设置 vm.zone_reclaim_mode = 0:内存不足时去remote memory分配优先于swap out local page

调低mysql被oom_kill的可能
echo -15 > /proc/`pidof mysqld`/oom_adj

关闭numa:

1、

[root@zabbix-server ~]# vim /etc/grub.conf

numa 和 mysql

2、

在bois中关闭

上一篇:一文了解JVM全部垃圾回收器,从Serial到ZGC


下一篇:mysqlslap工具测试mysql DB的性能