MySQL之swap配置

jx_yu發表於2016-06-23

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的機率越大。對於大多數作業系統來講,設定swappiness100可能會影響整體效能,而設定很小的值(甚至為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錯誤的交換出去了,將浪費很多CPUIO資源。 InnoDB自己管理快取,cache的檔案資料來說佔用了swap,對InnoDB幾乎沒有任何好處。 

所以,之前的核心版本下我們在MySQL的伺服器上最好設定vm.swappiness=0

 

在之前核心版本的OSvm.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

 

解決辦法

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

修改mysqloom_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://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

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

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27000195/viewspace-2120775/,如需轉載,請註明出處,否則將追究法律責任。

相關文章