ITPub博客

首页 > 数据库 > MySQL > MySQL之swap配置

MySQL之swap配置

原创 MySQL 作者:jx_yu 时间:2016-06-23 09:10:41 0 删除 编辑

Swappiness

Swappiness is a Linux kernel parameter that controls the relative weight given to swapping out runtime memory, as opposed to dropping pages from the system page cache. Swappiness can be set to values between 0 and 100 inclusive. A low value causes the kernel to avoid swapping, a higher value causes the kernel to try to use swap space. The default value is 60, and for most desktop systems, setting it to 100 may affect the overall performance, whereas setting it lower (even 0) may decrease response latency。

 

大概意思是说:Swappiness 是一个linux内核参数,它控制物理内存交换出去的相对权重。swappiness可以被设置为0~100之间,默认为60,值越高优先使用swap的几率越大。对于大多数操作系统来讲,设置swappiness为100可能会影响整体性能,而设置很小的值(甚至为0)可能会降低响应延迟。

 


With kernel version 3.5 and over, as well as kernel version 2.6.32-303 and over, it is likely better to use 1 for cases where 0 used to be optimal

在内核版本3.5以及以上和 RHEL/CentOS kernels内核版本2.6.32-303.el6以及以上,建议使用1来代替之前内核版本下的swappiness=0的效果。

 

此修改在很多资料都特别提示了,如RHEL官方:

clip_image004

 

一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将浪费很多CPU和IO资源。 InnoDB自己管理缓存,cache的文件数据来说占用了swap,对InnoDB几乎没有任何好处。 

所以,之前的内核版本下我们在MySQL的服务器上最好设置vm.swappiness=0。

 

在之前内核版本的OS中,vm.swappiness = 0表示尽量少的使用swap,但也会使用swap空间的,并不是完全禁用swap。

新的内核版本(内核版本3.5以及以上和 RHEL/CentOS kernels内核版本2.6.32-303以及以上),vm.swappiness = 0的行为发生了变化,它更多的避免了swap交换,除非(nr_free + nr_filebacked < high watermark)时才会swap,也就是说空闲内存和文件缓存基本没有了才会触发内存swap,这样的话:内存如果不够了,Linux有可能触发OOM,从而kill掉耗费内存最多的MySQL进程。

参考wiki:https://en.wikipedia.org/wiki/Swappiness#cite_note-2

 

解决办法

1、尽量保证Linux操作系统还有足够的内存

2、针对MySQL的服务器OS:

         之前的内核版本,建议设置vm.swappiness=0

   最新的内核(内核版本3.5以及以上和 RHEL/CentOS kernels内核版本2.6.32-303.el6以及以上),建议设置vm.swappiness=1

3、考虑设置 /proc/(pidof -s mysqld)/oom_adj为较小的值来尽量避免MySQL由于内存不足而被关闭。

      值的范围为-16~15,“-17”是一个特殊的值。如果设置为-17,就会禁止OOM Killer发出的信号(从Linux 2.6.12开始支持设置-17)。

      例如:echo  -15 > /proc/(pidof -s mysqld)/oom_score_adj

 

修改swappiness的方法 

#临时修改

# Set the swappiness value as root

echo 10 > /proc/sys/vm/swappiness

 

# Alternatively, run this

sysctl -w vm.swappiness=10

 

# Verify the change

cat /proc/sys/vm/swappiness

10

 

# Alternatively, verify the change

sysctl vm.swappiness

vm.swappiness = 10

#永久生效需要修改配置文件sysctl.conf

/etc/sysctl.conf

vm.swappiness = 10

修改mysql的oom_adj值

# cat /proc/(pidof -s mysqld)/oom_score_adj

0

# echo -15 > /proc/(pidof -s mysqld)/oom_score_adj

#当然,如果需要的话可以完全关闭 OOM killer(不推荐用在生产环境):

# sysctl -w vm.overcommit_memory=2

# echo "vm.overcommit_memory=2" >> /etc/sysctl.conf

 

 

参考链接:

https://en.wikipedia.org/wiki/Swappiness#cite_note-2

https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

http://blog.csdn.net/longxibendi/article/details/38146521

http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27000195/viewspace-2120775/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: nc拷贝文件
请登录后发表评论 登录
全部评论

注册时间:2012-05-23

  • 博文量
    80
  • 访问量
    876947