NUMA导致的MySQL服务器SWAP问题分析与解决方案

栏目: 数据库 · 发布时间: 6年前

内容简介:先从swap产生的原理来分析,由于linux内存管理比较复杂,下面以问答的方式列了一些重要的点,方便大家理解:1、swap是如何产生的swap指的是一个交换分区或文件,主要是在内存使用存在压力时,触发内存回收,这时可能会将部分内存的数据交换到swap空间。

【SWAP产生原理】

先从swap产生的原理来分析,由于 linux 内存管理比较复杂,下面以问答的方式列了一些重要的点,方便大家理解:

1、swap是如何产生的

swap指的是一个交换分区或文件,主要是在内存使用存在压力时,触发内存回收,这时可能会将部分内存的数据交换到swap空间。

2、内存回收的机制

<1>Linux内核使用cache对部分文件进行缓存,提升文件读写效率。所以 引入了kswapd进程进行周期性检查,保证剩余内存空间。

<2>当内存分配没有足够的空间时,直接内存回收。

3、内存回收如何实现

这部分实现非常复杂,简单来说,内存回收操作主要针对内存的文件页和匿名页,这些页都通过LRU链表来管理。

其中anon的匿名页内存主要回收手段是swap,文件页释放方式是写回和清空。

4、讲几个重要的概念

<1>内存节点node,在NUMA的情况下,CPU访问不同位置的内存,会有本地内存和远端内存之分,这两个就是不同的节点。

<2>内存分区 zone,linux对内存节点做了进一步划分,将一个节点划分为不同的区。内存管理的逻辑以zone为单位。

<3>内存水位标记,分为high、low、min

通过下图可以比较直观的了解

NUMA导致的 <a href='https://www.codercto.com/topics/18746.html'>MySQL</a> 服务器SWAP问题分析与解决方案

5、内存回收行为

<1>当系统剩余内存低于low时,kswapd开始起作用进行内存回收,直到内存达到high水位。

<2>当剩余内存达到min时就会触发直接回收。

<3>当触发全局回收,并且file+free<=high时,一定会进行针对匿名页的swap。

下面举例:

在数据库做全备份时cache大量使用,剩余可用空间不足,触发内存回收,

NUMA导致的MySQL服务器SWAP问题分析与解决方案

上图是/proc/zoneinfo的部分内容,可以看到满足了file+free<=high的条件,同一时间触发了swap,将内存匿名页的数据写入交换区

NUMA导致的MySQL服务器SWAP问题分析与解决方案

有大量的文件页cache,为什么会出现file+free<=high的情况,分析下来全备文件缓存时,node 0的nr_inactive_file很低,大部分非活动的文件页都分布在node 1上,是由于开启NUMA导致的。

【关闭NUMA的方案】

1、 在mysqld_safe脚本中加上“numactl –interleave all”来启动mysqld

2、 Linux Kernel启动参数中加上numa=off,需要重启服务器

3、 在BIOS层面关闭NUMA

4、 MySQL 5.6.27/5.7.9开始引用innodb_numa_interleave选项

对于2、3、4关闭NUMA的方案比较简单,不做详细描述,下面重点描述下1方案

【开启numa interleave访问的步骤】

1、 yum install numactl -y

2、修改/usr/bin/mysqld_safe文件

cmd="`mysqld_ld_preload_text`$NOHUP_NICENESS"下新增一条脚本

cmd="/usr/bin/numactl --interleave all $cmd"

NUMA导致的MySQL服务器SWAP问题分析与解决方案

3、service mysql stop

4、#写入硬盘,防止数据丢失

sync;sync;sync

5、#延迟10秒

sleep 10

6、#清理pagecache、dentries和inodes

sysctl -q -w vm.drop_caches=3

7、service mysql start

8、验证numactl –interleave all是否生效,可以通过下面命令,interleave_hit是采用interleave策略从该节点分配的次数,没有启动interleave策略的服务器,这个值会很低

numastat -mn -p `pidof mysqld`

NUMA导致的MySQL服务器SWAP问题分析与解决方案

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-10/154976.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

学习JavaScript数据结构与算法

学习JavaScript数据结构与算法

[巴西] 格罗纳(Loiane Groner) / 孙晓博、邓钢、吴双、陈迪、袁源 / 人民邮电出版社 / 2015-10-1 / 39.00

本书首先介绍了JavaScript语言的基础知识,接下来讨论了数组、栈、队列、链表、集合、字典、散列表、树、图等数据结构,之后探讨了各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、顺序搜索、二分搜索,还介绍了动态规划和贪心算法等常用的高级算法及相关知识。一起来看看 《学习JavaScript数据结构与算法》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具