MySQL占用內(nèi)存和SWAP問題解決
背景
發(fā)現(xiàn)公司的項(xiàng)目部署上,經(jīng)常出現(xiàn)數(shù)據(jù)庫(kù)占用內(nèi)存很高(接近6G)的情況,而且還出現(xiàn)了SWAP使用到90%左右的水平。所以需要排查數(shù)據(jù)庫(kù)使用內(nèi)存的情況,看數(shù)據(jù)庫(kù)為什么使用了這么多內(nèi)存,而且會(huì)不會(huì)頻繁使用交換空間。
要解決的問題:
-
數(shù)據(jù)庫(kù)使用高內(nèi)存
-
數(shù)據(jù)庫(kù)使用SWAP
解決
SWAP空間
在內(nèi)存不夠的時(shí)候,磁盤空間當(dāng)做內(nèi)存
系統(tǒng)默認(rèn)已經(jīng)分配了SWAP空間大小,可以通過指令 “cat /proc/swaps”、“swapon -s”、“free”等命令查看Swap分區(qū)的情況
系統(tǒng)關(guān)于SWAP的設(shè)置
vm.swappiness,這個(gè)一般需要設(shè)置成小于等于10。
設(shè)置方式:

查看是否發(fā)生內(nèi)存泄露
通過free -gt 查看內(nèi)存使用情況,如果cached 和 used 相差特別大的話,基本可確定系統(tǒng)發(fā)生內(nèi)存泄露。
數(shù)據(jù)庫(kù)使用NUMA對(duì)SWAP的影響
首先,NUMA到底是什么?
它表示給CPU動(dòng)態(tài)分配內(nèi)存,可能會(huì)導(dǎo)致當(dāng)某個(gè)CPU需要占用大量?jī)?nèi)存的時(shí)候,會(huì)分配不了,然后就去占用SWAP的空間了。
解決方式:5.6.27之后的版本,修改mysql里面的innodb_numa_interleave配置。
如果版本比較低,則可以在mysql_safe的啟動(dòng)腳本中加上numactl –interleave all 來解決。
其他調(diào)整方式
修改innodb_flush_method為O_DIRECT,這樣InnoDB會(huì)繞過Cache來訪問磁盤。
參考網(wǎng)站:
NUMA架構(gòu)的CPU -- 你真的用好了么?

浙公網(wǎng)安備 33010602011771號(hào)