关闭NUMA
今天朋友告知他的库因为numa的原因导致OOM了,趁着这个话题就来操作一把测试库的numa。
关于swap(摘自网络)
swap是如何产生的
swap指的是一个交换分区或文件,主要是在内存使用存在压力时,触发内存回收,这时可能会将部分内存的数据交换到swap空间
内存回收的机制
①Linux内核使用cache对部分文件进行缓存,提升文件读写效率。所以 引入了kswapd进程进行周期性检查,保证剩余内存空间
②当内存分配没有足够的空间时,直接内存回收
内存回收如何实现
这部分实现非常复杂,简单来说,内存回收操作主要针对内存的文件页和匿名页,这些页都通过LRU链表来管理。
其中anon的匿名页内存主要回收手段是swap,文件页释放方式是写回和清空
关于swappiness(摘自网络)
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60
简单地说这个参数定义了系统对swap的使用倾向,默认值为60,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性
关于numa(摘自网络)
numa主要是和swap有关
numactl --hardware
当发现numa_miss数值比较高时,说明需要对分配策略进行调整。例如将指定进程关联绑定到指定的CPU上,从而提高内存命中率
操作部分
关闭numa
在操作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off
此外在mysql版本5.6.27/5.7.8以后,可以在cnf里配置innodb_numa_interleave参数,将其设置为ON
查询当前swappiness的设置值
[root@zjk ~]# cat /proc/sys/vm/swappiness
60
查询当前swap使用情况
清空swap(执行swapoff -a;swapon -a)
重新设置swappiness值
vim /etc/sysctl.conf; 设置vm.swappiness=0
使该设置生效
sysctl -p
来看一下更改前后vmstat中swap的变化
改完swappiness之后